# This file is dual-licensed. Choose whichever licence you want from
# the two licences listed below.
#
# The first licence is a regular 2-clause BSD licence. The second licence
# is the CC-0 from Creative Commons. It is intended to release Monocypher
# to the public domain. The BSD licence serves as a fallback option.
#
# SPDX-License-Identifier: BSD-2-Clause OR CC0-1.0
#
# ------------------------------------------------------------------------
#
# Copyright (c) 2017-2019, Loup Vaillant
# Copyright (c) 2017, 2019, Fabio Scotoni
# All rights reserved.
#
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the
# distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# ------------------------------------------------------------------------
#
# Written in 2017-2019 by Loup Vaillant and Fabio Scotoni
#
# To the extent possible under law, the author(s) have dedicated all copyright
# and related neighboring rights to this software to the public domain
# worldwide. This software is distributed without any warranty.
#
# You should have received a copy of the CC0 Public Domain Dedication along
# with this software. If not, see
#
CC = gcc -std=c99
CFLAGS = -pedantic -Wall -Wextra
.PHONY: all clean
VEC = chacha20 hchacha20 xchacha20 ietf_chacha20 \
aead_ietf aead_8439 \
poly1305 blake2b sha512 sha512_hmac sha512_hkdf argon2 \
edDSA edDSA_pk ed_25519 ed_25519_pk ed_25519_check \
ed_25519ph \
x25519 x25519_pk elligator_inv elligator_dir
VEC2 = $(patsubst %, %.all.vec, $(VEC))
HEADERS = $(patsubst %, %.h.vec , $(VEC))
VECTORS = ../vectors.h
all: $(VECTORS)
clean:
rm -f *.out *.vec *.o
rm -f $(VECTORS)
elligator_inv.vec: elligator-inverse.py elligator.py elligator_scalarmult.py
./$< >$@
elligator_dir.vec: elligator-direct.py elligator.py
./$< >$@
sha512_hkdf.vec: sha512_hkdf.py
./$< >$@
%.vec: %.out
./$< > $@
utils.o: utils.c utils.h
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.c ../utils.h ../externals/ed25519-donna/ed25519.h
$(CC) $(CFLAGS) -c $< \
-I .. \
-I ../externals/ed25519-donna \
-I ../../src \
-I ../../src/optional \
$$(pkg-config --cflags libsodium)
%.out: %.o ed25519.o utils.o
$(CC) $(CFLAGS) -o $@ $^ \
$$(pkg-config --libs libsodium)
ed25519.o: ../externals/ed25519-donna/ed25519.c \
$(wildcard ../externals/ed25519-donna/*.h)
$(CC) $(CFLAGS) -c $< \
-I ../../src \
-I ../../src/optional \
$$(pkg-config --cflags libsodium) \
-DED25519_CUSTOMHASH \
-DED25519_TEST \
-DED25519_NO_INLINE_ASM \
-DED25519_FORCE_32BIT
vector_to_header.out: vector_to_header.c
$(CC) $(CFLAGS) $< -o $@
chacha20.all.vec : chacha20.vec vectors/chacha20
poly1305.all.vec : poly1305.vec vectors/poly1305
x25519.all.vec : x25519.vec vectors/x25519
x25519_pk.all.vec : x25519_pk.vec
hchacha20.all.vec : hchacha20.vec
xchacha20.all.vec : xchacha20.vec
ietf_chacha20.all.vec : ietf_chacha20.vec
aead_ietf.all.vec : aead_ietf.vec
aead_8439.all.vec : aead_8439.vec
blake2b.all.vec : blake2b.vec vectors/blake2b
sha512.all.vec : sha512.vec
sha512_hmac.all.vec : sha512_hmac.vec vectors/sha512_hmac
sha512_hkdf.all.vec : sha512_hkdf.vec
argon2.all.vec : argon2.vec vectors/argon2
edDSA.all.vec : edDSA.vec
edDSA_pk.all.vec : edDSA_pk.vec
ed_25519.all.vec : ed_25519.vec
ed_25519_pk.all.vec : ed_25519_pk.vec
ed_25519_check.all.vec: vectors/ed_25519_check
ed_25519ph.all.vec : vectors/ed_25519ph
elligator_dir.all.vec : elligator_dir.vec vectors/elligator_dir
elligator_inv.all.vec : elligator_inv.vec vectors/elligator_inv
$(VEC2):
mkdir -p $(@D)
cat $^ > $@
%.h.vec: %.all.vec vector_to_header.out
./vector_to_header.out $(patsubst %.all.vec,%,$<) < $< > $@
prelude.h.vec:
@echo "creating prelude.h.vec"
@echo "// Generated with hard coded official vectors, and" > $@
@echo "// random vectors with libsodium and ed25519-donna." >> $@
@echo "// Download Monocypher's git repository to regenerate." >> $@
@echo "#include " >> $@
@echo "#include " >> $@
@echo "" >> $@
$(VECTORS): prelude.h.vec $(HEADERS)
cat $^ > $@