root/ext/digest/md5.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ScmMd5
  2. md5_allocate
  3. Scm_Init_md5
  4. md5__25md5_update
  5. md5__25md5_final
  6. 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 }

/* [<][>][^][v][top][bottom][index][help] */