summaryrefslogtreecommitdiff
path: root/include/curve25519.h
diff options
context:
space:
mode:
authorVincent Palatin <vpalatin@chromium.org>2017-02-16 14:15:30 +0100
committerchrome-bot <chrome-bot@chromium.org>2017-02-23 16:02:03 -0800
commit0d858f1544cfd50f4a63f348d722bb16d638c0b1 (patch)
treec4fe70955629048828b9fdb4369a667d4f26c515 /include/curve25519.h
parentbff020fc6b25fe5dc0245c811d9f53b7c518aa08 (diff)
downloadchrome-ec-0d858f1544cfd50f4a63f348d722bb16d638c0b1.tar.gz
curve25519: strip-down, build and test
Keep only the most compact version of the curve25519 code and remove the remaining unused code for easier compilation. Do the minimal changes to make it compile in the EC code base, there should be no real functional changes. Re-use the wording from BoringSSL include/openssl/curve25519.h for the header. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=none BUG=chrome-os-partner:62991 TEST=run x25519 on host (ie 'make run-x25519') and the STM32L4 target: make BOARD=eve_fp PROJECT=x25519 TEST_BUILD=y ./util/flash_ec --board=eve_fp --image=build/eve_fp/x25519.bin execute 'runtest' in the console. Change-Id: I13dbe453eff39b461effb1b3ffa549afc1749fef Reviewed-on: https://chromium-review.googlesource.com/444187 Commit-Ready: Vincent Palatin <vpalatin@chromium.org> Tested-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Adam Langley <agl@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'include/curve25519.h')
-rw-r--r--include/curve25519.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/include/curve25519.h b/include/curve25519.h
new file mode 100644
index 0000000000..4b75373da1
--- /dev/null
+++ b/include/curve25519.h
@@ -0,0 +1,62 @@
+/* Copyright 2017 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __CROS_EC_CURVE25519_H
+#define __CROS_EC_CURVE25519_H
+
+#include <stdint.h>
+
+/* Curve25519.
+ *
+ * Curve25519 is an elliptic curve. See https://tools.ietf.org/html/rfc7748.
+ */
+
+
+/* X25519.
+ *
+ * X25519 is the Diffie-Hellman primitive built from curve25519. It is
+ * sometimes referred to as “curve25519”, but “X25519” is a more precise
+ * name.
+ * See http://cr.yp.to/ecdh.html and https://tools.ietf.org/html/rfc7748.
+ */
+
+#define X25519_PRIVATE_KEY_LEN 32
+#define X25519_PUBLIC_VALUE_LEN 32
+
+/**
+ * Generate a public/private key pair.
+ * @param out_public_value generated public key.
+ * @param out_private_value generated private key.
+ */
+void X25519_keypair(uint8_t out_public_value[32], uint8_t out_private_key[32]);
+
+/**
+ * Diffie-Hellman function.
+ * @param out_shared_key
+ * @param private_key
+ * @param out_public_value
+ * @return one on success and zero on error.
+ *
+ * X25519() writes a shared key to @out_shared_key that is calculated from the
+ * given private key and the peer's public value.
+ *
+ * Don't use the shared key directly, rather use a KDF and also include the two
+ * public values as inputs.
+ */
+int X25519(uint8_t out_shared_key[32], const uint8_t private_key[32],
+ const uint8_t peers_public_value[32]);
+
+/**
+ * Compute the matching public key.
+ * @param out_public_value computed public key.
+ * @param private_key private key to use.
+ *
+ * X25519_public_from_private() calculates a Diffie-Hellman public value from
+ * the given private key and writes it to @out_public_value.
+ */
+void X25519_public_from_private(uint8_t out_public_value[32],
+ const uint8_t private_key[32]);
+
+#endif /* __CROS_EC_CURVE25519_H */