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