/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- ScmMd5
- md5_allocate
- Scm_Init_md5
- md5__25md5_update
- md5__25md5_final
- Scm_Init_md5
1 /* Generated by genstub. Do not edit. */
2 #include <gauche.h>
3 #if defined(__CYGWIN__) || defined(__MINGW32__)
4 #define SCM_CGEN_CONST /*empty*/
5 #else
6 #define SCM_CGEN_CONST const
7 #endif
8
9 #include <gauche/extend.h>
10 #include <gauche/class.h>
11 #include <gauche/uvector.h>
12 #include "md5.h"
13
14 typedef struct ScmMd5Rec {
15 SCM_HEADER;
16 MD5_CTX ctx;
17 } ScmMd5;
18
19 SCM_CLASS_DECL(Scm_Md5Class);
20 static ScmObj md5_allocate(ScmClass *, ScmObj);
21 SCM_DEFINE_BUILTIN_CLASS(Scm_Md5Class,
22 NULL, NULL, NULL, md5_allocate,
23 NULL);
24
25 #define SCM_CLASS_MD5 (&Scm_Md5Class)
26 #define SCM_MD5(obj) ((ScmMd5*)obj)
27 #define SCM_MD5P(obj) SCM_XTYPEP(obj, SCM_CLASS_MD5)
28
29 static ScmObj md5_allocate(ScmClass *klass, ScmObj initargs)
30 {
31 ScmMd5 *md5 = SCM_ALLOCATE(ScmMd5, klass);
32 SCM_SET_CLASS(md5, klass);
33 MD5Init(&md5->ctx);
34 return SCM_OBJ(md5);
35 }
36
37 /* Hack for initialization stub */
38 static void Scm_md5_internal_init(ScmModule*);
39 void Scm_Init_md5(void)
40 {
41 ScmModule *mod = SCM_FIND_MODULE("rfc.md5", SCM_FIND_MODULE_CREATE);
42 SCM_INIT_EXTENSION(md5);
43 Scm_InitStaticClass(&Scm_Md5Class, "<md5-context>", mod, NULL, 0);
44 Scm_md5_internal_init(mod);
45 }
46
47 #define Scm_Init_md5 Scm_md5_internal_init
48
49 static ScmObj md5__25md5_update(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
50 {
51 ScmObj md5_scm;
52 ScmMd5* md5;
53 ScmObj data_scm;
54 ScmObj data;
55 SCM_ENTER_SUBR("%md5-update");
56 md5_scm = SCM_ARGREF(0);
57 if (!SCM_MD5P(md5_scm)) Scm_Error("<md5> required, but got %S", md5_scm);
58 md5 = SCM_MD5(md5_scm);
59 data_scm = SCM_ARGREF(1);
60 data = (data_scm);
61 {
62
63 if (SCM_U8VECTORP(data)){
64 MD5Update(&md5->ctx, SCM_UVECTOR_ELEMENTS(SCM_U8VECTOR(data)), SCM_U8VECTOR_SIZE(SCM_U8VECTOR(data)));
65 } else if (SCM_STRINGP(data)) {
66 const ScmStringBody *b = SCM_STRING_BODY(data);
67 MD5Update(&md5->ctx,
68 (const unsigned char*)SCM_STRING_BODY_START(b),
69 SCM_STRING_BODY_SIZE(b));
70 } else {
71 Scm_Error("u8vector or string required, but got: %S", data);
72 }
73 SCM_RETURN(SCM_UNDEFINED);
74 }
75 }
76
77 static SCM_DEFINE_STRING_CONST(md5__25md5_update__NAME, "%md5-update", 11, 11);
78 static SCM_DEFINE_SUBR(md5__25md5_update__STUB, 2, 0, SCM_OBJ(&md5__25md5_update__NAME), md5__25md5_update, NULL, NULL);
79
80 static ScmObj md5__25md5_final(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
81 {
82 ScmObj md5_scm;
83 ScmMd5* md5;
84 SCM_ENTER_SUBR("%md5-final");
85 md5_scm = SCM_ARGREF(0);
86 if (!SCM_MD5P(md5_scm)) Scm_Error("<md5> required, but got %S", md5_scm);
87 md5 = SCM_MD5(md5_scm);
88 {
89 unsigned char digest[16];
90 MD5Final(digest, &md5->ctx);
91 SCM_RETURN(Scm_MakeString((char *)digest, 16, 16, SCM_MAKSTR_INCOMPLETE|SCM_MAKSTR_COPYING));
92 }
93 }
94
95 static SCM_DEFINE_STRING_CONST(md5__25md5_final__NAME, "%md5-final", 10, 10);
96 static SCM_DEFINE_SUBR(md5__25md5_final__STUB, 1, 0, SCM_OBJ(&md5__25md5_final__NAME), md5__25md5_final, NULL, NULL);
97
98 void Scm_Init_md5(ScmModule *module)
99 {
100
101 SCM_DEFINE(module, "%md5-final", SCM_OBJ(&md5__25md5_final__STUB));
102 SCM_DEFINE(module, "%md5-update", SCM_OBJ(&md5__25md5_update__STUB));
103 }