Work around Travis "virtual memory exhausted" error
[openssl.git] / crypto / siphash / siphash_ameth.c
1 /*
2  * Copyright 2007-2017 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the OpenSSL license (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 "internal/asn1_int.h"
14 #include "internal/siphash.h"
15 #include "siphash_local.h"
16
17 /*
18  * SIPHASH "ASN1" method. This is just here to indicate the maximum
19  * SIPHASH output length and to free up a SIPHASH key.
20  */
21
22 static int siphash_size(const EVP_PKEY *pkey)
23 {
24     return SIPHASH_MAX_DIGEST_SIZE;
25 }
26
27 static void siphash_key_free(EVP_PKEY *pkey)
28 {
29     ASN1_OCTET_STRING *os = EVP_PKEY_get0(pkey);
30
31     if (os != NULL) {
32         if (os->data != NULL)
33             OPENSSL_cleanse(os->data, os->length);
34         ASN1_OCTET_STRING_free(os);
35     }
36 }
37
38 static int siphash_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
39 {
40     /* nothing (including ASN1_PKEY_CTRL_DEFAULT_MD_NID), is supported */
41     return -2;
42 }
43
44 static int siphash_pkey_public_cmp(const EVP_PKEY *a, const EVP_PKEY *b)
45 {
46     return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b));
47 }
48
49 const EVP_PKEY_ASN1_METHOD siphash_asn1_meth = {
50     EVP_PKEY_SIPHASH,
51     EVP_PKEY_SIPHASH,
52     0,
53
54     "SIPHASH",
55     "OpenSSL SIPHASH method",
56
57     0, 0, siphash_pkey_public_cmp, 0,
58
59     0, 0, 0,
60
61     siphash_size,
62     0, 0,
63     0, 0, 0, 0, 0, 0, 0,
64
65     siphash_key_free,
66     siphash_pkey_ctrl,
67     0, 0
68 };