Home | History | Annotate | Line # | Download | only in pem
      1 /*
      2  * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
      3  *
      4  * Licensed under the Apache License 2.0 (the "License").  You may not use
      5  * this file except in compliance with the License.  You can obtain a copy
      6  * in the file LICENSE in the source distribution or at
      7  * https://www.openssl.org/source/license.html
      8  */
      9 
     10 #include <stdio.h>
     11 #include "internal/cryptlib.h"
     12 #include <openssl/evp.h>
     13 #include <openssl/objects.h>
     14 #include <openssl/x509.h>
     15 #include <openssl/pem.h>
     16 
     17 int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type)
     18 {
     19     return EVP_DigestInit_ex(ctx, type, NULL);
     20 }
     21 
     22 int PEM_SignUpdate(EVP_MD_CTX *ctx,
     23                    const unsigned char *data, unsigned int count)
     24 {
     25     return EVP_DigestUpdate(ctx, data, count);
     26 }
     27 
     28 int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
     29                   unsigned int *siglen, EVP_PKEY *pkey)
     30 {
     31     unsigned char *m;
     32     int i, ret = 0;
     33     unsigned int m_len;
     34 
     35     m = OPENSSL_malloc(EVP_PKEY_get_size(pkey));
     36     if (m == NULL) {
     37         ERR_raise(ERR_LIB_PEM, ERR_R_MALLOC_FAILURE);
     38         goto err;
     39     }
     40 
     41     if (EVP_SignFinal(ctx, m, &m_len, pkey) <= 0)
     42         goto err;
     43 
     44     i = EVP_EncodeBlock(sigret, m, m_len);
     45     *siglen = i;
     46     ret = 1;
     47  err:
     48     /* ctx has been zeroed by EVP_SignFinal() */
     49     OPENSSL_free(m);
     50     return ret;
     51 }
     52