]> git.proxmox.com Git - ceph.git/blob - ceph/src/cls_crypto.cc
add subtree-ish sources for 12.0.3
[ceph.git] / 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