Beispiel #1
0
int evp_sign_internal(EVP_PKEY* evp, EVP_MD_CTX* ctx, enum EVP_DIGEST_TYPE type, const unsigned char* digest, unsigned int digest_length, string* s)
{
  const EVP_MD* md = NULL;

  md = get_EVP_MD(type);

  if (md == NULL) {
    return 0;
  }

  EVP_MD_CTX_init(ctx);

  if (!EVP_SignInit(ctx, md)) {
    return 0;
  }

  if (!EVP_SignUpdate(ctx, digest, digest_length)) {
    return 0;
  }

  if (!EVP_SignFinal(ctx, string_base(s), &string_size(s), evp)) {
    return 0;
  }

  return 1;
}
    string_base substr ( euint pos = 0, euint len = npos ) const {
        if ( pos >= m_size ) {
            return string_base();
        }

        if ( pos == 0 && len == npos ) {
            return string_base ( *this );
        }

        if ( len + pos > m_size ) {
            len = m_size - pos;
        }

        C *str = ( C * ) Malloc ( (len + 1) * sizeof(C) );
        memcpy ( str, &m_str[pos], len * sizeof(C) );
        str[len] = 0;
        string_base ret;
        Mfree ( ret.m_str );
        ret.m_str = str;
        ret.m_size = len;
        ret.m_hash = _hash ( str );
        return ret;
    }
Beispiel #3
0
int evp_verify_internal(EVP_PKEY* evp, EVP_MD_CTX* ctx, enum EVP_DIGEST_TYPE type, const unsigned char* digest, unsigned int digest_length, string* s)
{
  const EVP_MD* md = NULL;
  int r = 0;

  md = get_EVP_MD(type);

  if (md == NULL) {
    fprintf(stderr, "evp_verify_internal: no message digest\n");
    return EVP_ERROR;
  }

  EVP_MD_CTX_init(ctx);

  if (!EVP_VerifyInit(ctx, md)) {
    fprintf(stderr, "evp_verify_iternal: EVP_VerifyInit failed\n");
    return EVP_ERROR;
  }

  if (!EVP_VerifyUpdate(ctx, digest, digest_length)) {
    fprintf(stderr, "evp_verify_internal: EVP_VerifyUpdate failed\n");
    return EVP_ERROR;
  }

  r = EVP_VerifyFinal(ctx, string_base(s), string_size(s), evp);

  switch (r) {
  case -1:
    fprintf(stderr, "evp_verify: EVP_VerifyFinal failed\n");
    return EVP_ERROR;
  case 0:
    return EVP_FAILURE;
  default:
    return EVP_SUCCESS;
  }
}