Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / cls_crypto.cc
1 #include <iostream>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <errno.h>
5
6 #include <openssl/md5.h>
7 #include <openssl/sha.h>
8
9 #include "include/types.h"
10 #include "objclass/objclass.h"
11
12
13 CLS_VER(1,0)
14 CLS_NAME(crypto)
15
16 int md5_method(cls_method_context_t ctx, char *indata, int datalen,
17                                  char **outdata, int *outdatalen)
18 {
19    MD5_CTX c;
20    unsigned char *md;
21
22    cls_log("md5 method");
23    cls_log("indata=%.*s data_len=%d", datalen, indata, datalen);
24
25    md = (unsigned char *)cls_alloc(MD5_DIGEST_LENGTH);
26    if (!md)
27      return -ENOMEM;
28
29    MD5_Init(&c);
30    MD5_Update(&c, indata, (unsigned long)datalen);
31    MD5_Final(md,&c);
32
33    *outdata = (char *)md;
34    *outdatalen = MD5_DIGEST_LENGTH;
35
36    return 0;
37 }
38
39 int sha1_method(cls_method_context_t ctx, char *indata, int datalen,
40                                  char **outdata, int *outdatalen)
41 {
42    SHA_CTX c;
43    unsigned char *md;
44
45    cls_log("sha1 method");
46    cls_log("indata=%.*s data_len=%d", datalen, indata, datalen);
47
48    md = (unsigned char *)cls_alloc(SHA_DIGEST_LENGTH);
49    if (!md)
50      return -ENOMEM;
51
52    SHA1_Init(&c);
53    SHA1_Update(&c, indata, (unsigned long)datalen);
54    SHA1_Final(md,&c);
55
56    *outdata = (char *)md;
57    *outdatalen = SHA_DIGEST_LENGTH;
58
59    return 0;
60 }
61
62 CLS_INIT(crypto)
63 {
64    cls_log("Loaded crypto class!");
65
66    cls_handle_t h_class;
67    cls_method_handle_t h_md5;
68    cls_method_handle_t h_sha1;
69
70    cls_register("crypto", &h_class);
71    cls_register_method(h_class, "md5", CLS_METHOD_RD, md5_method, &h_md5);
72    cls_register_method(h_class, "sha1", CLS_METHOD_RD, sha1_method, &h_sha1);
73
74    return;
75 }
76