| SSLeay_add_all_digests(); |
| MODULE = OpenSSL::MD PACKAGE = OpenSSL::MD PREFIX = p5_EVP_MD_ |
| # 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 |
| if ((items == 1) && SvPOK(ST(0))) |
| else if ((items == 2) && SvPOK(ST(1))) |
| croak("Usage: OpenSSL::MD::new(type)"); |
| md=EVP_get_digestbyname(name); |
| ctx=malloc(sizeof(EVP_MD_CTX)); |
| sv_setref_pv(ST(0), "OpenSSL::MD", (void*)ctx); |
| RETVAL.dptr=OBJ_nid2ln(EVP_MD_type(EVP_MD_CTX_type(ctx))); |
| RETVAL.dsize=strlen(RETVAL.dptr); |
| EVP_DigestInit(ctx,EVP_MD_CTX_type(ctx)); |
| p5_EVP_MD_update(ctx, in) |
| EVP_DigestUpdate(ctx,in.dptr,in.dsize); |
| char md[EVP_MAX_MD_SIZE]; |
| EVP_DigestFinal(ctx,md,&len); |