aboutsummaryrefslogtreecommitdiffstats
path: root/src/_cffi_src/commoncrypto/common_hmac.py
blob: 721cff5334337ba0a88ed95f31efaca52691aefb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.

from __future__ import absolute_import, division, print_function

INCLUDES = """
#include <CommonCrypto/CommonHMAC.h>
"""

TYPES = """
typedef struct {
    ...;
} CCHmacContext;
enum {
    kCCHmacAlgSHA1,
    kCCHmacAlgMD5,
    kCCHmacAlgSHA256,
    kCCHmacAlgSHA384,
    kCCHmacAlgSHA512,
    kCCHmacAlgSHA224
};
typedef uint32_t CCHmacAlgorithm;
"""

FUNCTIONS = """
void CCHmacInit(CCHmacContext *, CCHmacAlgorithm, const void *, size_t);
void CCHmacUpdate(CCHmacContext *, const void *, size_t);
void CCHmacFinal(CCHmacContext *, void *);

"""

MACROS = """
"""

CUSTOMIZATIONS = """
"""
background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import absolute_import, division, print_function

import os

from cryptography.primitives import hashes

from .utils import generate_hash_test, generate_long_string_hash_test
from ..utils import load_hash_vectors_from_file


class TestSHA1(object):
    test_SHA1 = generate_hash_test(
        load_hash_vectors_from_file,
        os.path.join("NIST", "SHABYTE"),
        [
            "SHA1LongMsg.rsp",
            "SHA1ShortMsg.rsp",
        ],
        hashes.SHA1,
        only_if=lambda api: api.supports_hash(hashes.SHA1),
        skip_message="Does not support SHA1",
    )


class TestSHA224(object):
    test_SHA224 = generate_hash_test(
        load_hash_vectors_from_file,
        os.path.join("NIST", "SHABYTE"),
        [
            "SHA224LongMsg.rsp",
            "SHA224ShortMsg.rsp",
        ],
        hashes.SHA224,
        only_if=lambda api: api.supports_hash(hashes.SHA224),
        skip_message="Does not support SHA224",
    )


class TestSHA256(object):
    test_SHA256 = generate_hash_test(
        load_hash_vectors_from_file,
        os.path.join("NIST", "SHABYTE"),
        [
            "SHA256LongMsg.rsp",
            "SHA256ShortMsg.rsp",
        ],
        hashes.SHA256,
        only_if=lambda api: api.supports_hash(hashes.SHA256),
        skip_message="Does not support SHA256",
    )


class TestSHA384(object):
    test_SHA384 = generate_hash_test(
        load_hash_vectors_from_file,
        os.path.join("NIST", "SHABYTE"),
        [
            "SHA384LongMsg.rsp",
            "SHA384ShortMsg.rsp",
        ],
        hashes.SHA384,
        only_if=lambda api: api.supports_hash(hashes.SHA384),
        skip_message="Does not support SHA384",
    )


class TestSHA512(object):
    test_SHA512 = generate_hash_test(
        load_hash_vectors_from_file,
        os.path.join("NIST", "SHABYTE"),
        [
            "SHA512LongMsg.rsp",
            "SHA512ShortMsg.rsp",
        ],
        hashes.SHA512,
        only_if=lambda api: api.supports_hash(hashes.SHA512),
        skip_message="Does not support SHA512",
    )


class TestRIPEMD160(object):
    test_RIPEMD160 = generate_hash_test(
        load_hash_vectors_from_file,
        os.path.join("ISO", "ripemd160"),
        [
            "ripevectors.txt",
        ],
        hashes.RIPEMD160,
        only_if=lambda api: api.supports_hash(hashes.RIPEMD160),
        skip_message="Does not support RIPEMD160",
    )

    test_RIPEMD160_long_string = generate_long_string_hash_test(
        hashes.RIPEMD160,
        "52783243c1697bdbe16d37f97f68f08325dc1528",
        only_if=lambda api: api.supports_hash(hashes.RIPEMD160),
        skip_message="Does not support RIPEMD160",
    )


class TestWhirlpool(object):
    test_whirlpool = generate_hash_test(
        load_hash_vectors_from_file,
        os.path.join("ISO", "whirlpool"),
        [
            "iso-test-vectors.txt",
        ],
        hashes.Whirlpool,
        only_if=lambda api: api.supports_hash(hashes.Whirlpool),
        skip_message="Does not support Whirlpool",
    )

    test_whirlpool_long_string = generate_long_string_hash_test(
        hashes.Whirlpool,
        ("0c99005beb57eff50a7cf005560ddf5d29057fd86b2"
         "0bfd62deca0f1ccea4af51fc15490eddc47af32bb2b"
         "66c34ff9ad8c6008ad677f77126953b226e4ed8b01"),
        only_if=lambda api: api.supports_hash(hashes.Whirlpool),
        skip_message="Does not support Whirlpool",
    )


class TestMD5(object):
    test_md5 = generate_hash_test(
        load_hash_vectors_from_file,
        os.path.join("RFC", "MD5"),
        [
            "rfc-1321.txt",
        ],
        hashes.MD5,
        only_if=lambda api: api.supports_hash(hashes.MD5),
        skip_message="Does not support MD5",
    )