Home | History | Annotate | Line # | Download | only in digests
      1 /*
      2  * Copyright 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 <openssl/crypto.h>
     11 #include "prov/digestcommon.h"
     12 #include "prov/implementations.h"
     13 
     14 typedef struct {
     15     unsigned char nothing;
     16 } NULLMD_CTX;
     17 
     18 static int null_init(NULLMD_CTX *ctx)
     19 {
     20     return 1;
     21 }
     22 
     23 static int null_update(NULLMD_CTX *ctx, const void *data, size_t datalen)
     24 {
     25     return 1;
     26 }
     27 
     28 static int null_final(unsigned char *md, NULLMD_CTX *ctx)
     29 {
     30     return 1;
     31 }
     32 
     33 /*
     34  * We must override the PROV_FUNC_DIGEST_FINAL as dgstsize == 0
     35  * and that would cause compilation warnings with the default implementation.
     36  */
     37 #undef PROV_FUNC_DIGEST_FINAL
     38 #define PROV_FUNC_DIGEST_FINAL(name, dgstsize, fin)                            \
     39 static OSSL_FUNC_digest_final_fn name##_internal_final;                        \
     40 static int name##_internal_final(void *ctx, unsigned char *out, size_t *outl,  \
     41                                  size_t outsz)                                 \
     42 {                                                                              \
     43     if (ossl_prov_is_running() && fin(out, ctx)) {                             \
     44         *outl = dgstsize;                                                      \
     45         return 1;                                                              \
     46     }                                                                          \
     47     return 0;                                                                  \
     48 }
     49 
     50 IMPLEMENT_digest_functions(nullmd, NULLMD_CTX,
     51                            0, 0, 0,
     52                            null_init, null_update, null_final)
     53