| |
| #include "openssl.h" |
| |
| int boot_digest() |
| { |
| SSLeay_add_all_digests(); |
| return(1); |
| } |
| |
| MODULE = OpenSSL::MD PACKAGE = OpenSSL::MD PREFIX = p5_EVP_MD_ |
| |
| PROTOTYPES: ENABLE |
| VERSIONCHECK: DISABLE |
| |
| # OpenSSL::MD::new(name) name= md2, md5, sha, sha1, or mdc2 |
| # md->name() - returns the name |
| # md->init() - reinitalises the digest |
| # md->update(data) - adds more data to digest |
| # digest=md->final() - returns digest |
| # |
| |
| void |
| p5_EVP_MD_new(...) |
| PREINIT: |
| EVP_MD_CTX *ctx; |
| EVP_MD *md; |
| char *name; |
| PPCODE: |
| if ((items == 1) && SvPOK(ST(0))) |
| name=SvPV(ST(0),na); |
| else if ((items == 2) && SvPOK(ST(1))) |
| name=SvPV(ST(1),na); |
| else |
| croak("Usage: OpenSSL::MD::new(type)"); |
| PUSHs(sv_newmortal()); |
| md=EVP_get_digestbyname(name); |
| if (md != NULL) |
| { |
| ctx=malloc(sizeof(EVP_MD_CTX)); |
| EVP_DigestInit(ctx,md); |
| sv_setref_pv(ST(0), "OpenSSL::MD", (void*)ctx); |
| } |
| |
| datum |
| p5_EVP_MD_name(ctx) |
| EVP_MD_CTX *ctx |
| CODE: |
| RETVAL.dptr=OBJ_nid2ln(EVP_MD_type(EVP_MD_CTX_type(ctx))); |
| RETVAL.dsize=strlen(RETVAL.dptr); |
| OUTPUT: |
| RETVAL |
| |
| void |
| p5_EVP_MD_init(ctx) |
| EVP_MD_CTX *ctx |
| CODE: |
| EVP_DigestInit(ctx,EVP_MD_CTX_type(ctx)); |
| |
| void |
| p5_EVP_MD_update(ctx, in) |
| EVP_MD_CTX *ctx |
| datum in |
| CODE: |
| EVP_DigestUpdate(ctx,in.dptr,in.dsize); |
| |
| datum |
| p5_EVP_MD_final(ctx) |
| EVP_MD_CTX *ctx |
| PREINIT: |
| char md[EVP_MAX_MD_SIZE]; |
| int len; |
| CODE: |
| EVP_DigestFinal(ctx,md,&len); |
| RETVAL.dptr=md; |
| RETVAL.dsize=len; |
| OUTPUT: |
| RETVAL |
| |
| void |
| p5_EVP_MD_DESTROY(ctx) |
| EVP_MD_CTX *ctx |
| CODE: |
| free((char *)ctx); |
| |