Sha256: 16fb232ff8b81b2fa551d69879a4edb02a70d3a399ca44d21f33b81a50cab333

Contents?: true

Size: 1.58 KB

Versions: 9

Compression:

Stored size: 1.58 KB

Contents

#include "xmlsecrb.h"

VALUE verify_signature_with_rsa_key(VALUE self, VALUE rb_rsa_key) {
  xmlDocPtr doc;
  xmlNodePtr node = NULL;
  xmlSecDSigCtxPtr dsigCtx = NULL;
  char *rsaKey;
  unsigned int rsaKeyLength;
  VALUE result = Qfalse;

  Data_Get_Struct(self, xmlDoc, doc);
  rsaKey = RSTRING_PTR(rb_rsa_key);
  rsaKeyLength = RSTRING_LEN(rb_rsa_key);

  // find start node
  node = xmlSecFindNode(xmlDocGetRootElement(doc), xmlSecNodeSignature, xmlSecDSigNs);
  if(node == NULL) {
    rb_raise(rb_eVerificationError, "start node not found");
    goto done;
  }

  // create signature context, we don't need keys manager in this example
  dsigCtx = xmlSecDSigCtxCreate(NULL);
  if(dsigCtx == NULL) {
    rb_raise(rb_eVerificationError, "failed to create signature context");
    goto done;
  }

  // load public key
  dsigCtx->signKey = xmlSecCryptoAppKeyLoadMemory((xmlSecByte *)rsaKey,
                                                  rsaKeyLength,
                                                  xmlSecKeyDataFormatPem,
                                                  NULL, // password
                                                  NULL, NULL);
  if(dsigCtx->signKey == NULL) {
    rb_raise(rb_eVerificationError, "failed to load public pem key");
    goto done;
  }

  // verify signature
  if(xmlSecDSigCtxVerify(dsigCtx, node) < 0) {
    rb_raise(rb_eVerificationError, "signature could not be verified");
    goto done;
  }
      
  if(dsigCtx->status == xmlSecDSigStatusSucceeded) {
    result = Qtrue;
  }    

done:
  if(dsigCtx != NULL) {
    xmlSecDSigCtxDestroy(dsigCtx);
  }

  return result;
}

Version data entries

9 entries across 9 versions & 4 rubygems

Version Path
money-nokogiri-xmlsec-0.0.5 ext/nokogiri_ext_xmlsec/nokogiri_verify_signature_rsa.c
nokogiri-xmlsec-ap-0.0.5 ext/nokogiri_ext_xmlsec/nokogiri_verify_signature_rsa.c
nokogiri-xmlsec1-0.0.11 ext/nokogiri_ext_xmlsec/nokogiri_verify_signature_rsa.c
nokogiri-xmlsec1-0.0.10 ext/nokogiri_ext_xmlsec/nokogiri_verify_signature_rsa.c
nokogiri-xmlsec1-0.0.9 ext/nokogiri_ext_xmlsec/nokogiri_verify_signature_rsa.c
nokogiri-xmlsec1-0.0.7 ext/nokogiri_ext_xmlsec/nokogiri_verify_signature_rsa.c
nokogiri-xmlsec1-0.0.6 ext/nokogiri_ext_xmlsec/nokogiri_verify_signature_rsa.c
nokogiri-xmlsec-0.0.4 ext/nokogiri_ext_xmlsec/nokogiri_verify_signature_rsa.c
nokogiri-xmlsec-0.0.3 ext/nokogiri_ext_xmlsec/nokogiri_verify_signature_rsa.c