Update - OpenSSL 1.1.1-pre7-dev
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#! /usr/bin/env perl
|
||||
# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
# Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the OpenSSL license (the "License"). You may not use
|
||||
# this file except in compliance with the License. You can obtain a copy
|
||||
@@ -186,6 +186,7 @@ $code.=<<___;
|
||||
.type poly1305_blocks,%function
|
||||
.align 5
|
||||
poly1305_blocks:
|
||||
.Lpoly1305_blocks:
|
||||
stmdb sp!,{r3-r11,lr}
|
||||
|
||||
ands $len,$len,#-16
|
||||
@@ -677,7 +678,7 @@ poly1305_blocks_neon:
|
||||
cmp $len,#64
|
||||
bhs .Lenter_neon
|
||||
tst ip,ip @ is_base2_26?
|
||||
beq poly1305_blocks
|
||||
beq .Lpoly1305_blocks
|
||||
|
||||
.Lenter_neon:
|
||||
stmdb sp!,{r4-r7}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
# PPC970 7.00/+114% 3.51/+205%
|
||||
# POWER7 3.75/+260% 1.93/+100%
|
||||
# POWER8 - 2.03/+200%
|
||||
# POWER9 - 1.56/+150%
|
||||
#
|
||||
# Do we need floating-point implementation for PPC? Results presented
|
||||
# in poly1305_ieee754.c are tricky to compare to, because they are for
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
# PPC970 6.03/+80%
|
||||
# POWER7 3.50/+30%
|
||||
# POWER8 3.75/+10%
|
||||
# POWER9 2.80/+12%
|
||||
|
||||
$flavour = shift;
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#include "internal/poly1305.h"
|
||||
#include "poly1305_local.h"
|
||||
|
||||
size_t Poly1305_ctx_size ()
|
||||
size_t Poly1305_ctx_size(void)
|
||||
{
|
||||
return sizeof(struct poly1305_context);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2007-2017 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright 2007-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "internal/asn1_int.h"
|
||||
#include "internal/poly1305.h"
|
||||
#include "poly1305_local.h"
|
||||
#include "internal/evp_int.h"
|
||||
|
||||
/*
|
||||
* POLY1305 "ASN1" method. This is just here to indicate the maximum
|
||||
@@ -45,6 +46,27 @@ static int poly1305_pkey_public_cmp(const EVP_PKEY *a, const EVP_PKEY *b)
|
||||
return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b));
|
||||
}
|
||||
|
||||
static int poly1305_set_priv_key(EVP_PKEY *pkey, const unsigned char *priv,
|
||||
size_t len)
|
||||
{
|
||||
ASN1_OCTET_STRING *os;
|
||||
|
||||
if (pkey->pkey.ptr != NULL || len != POLY1305_KEY_SIZE)
|
||||
return 0;
|
||||
|
||||
os = ASN1_OCTET_STRING_new();
|
||||
if (os == NULL)
|
||||
return 0;
|
||||
|
||||
if (!ASN1_OCTET_STRING_set(os, priv, len)) {
|
||||
ASN1_OCTET_STRING_free(os);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pkey->pkey.ptr = os;
|
||||
return 1;
|
||||
}
|
||||
|
||||
const EVP_PKEY_ASN1_METHOD poly1305_asn1_meth = {
|
||||
EVP_PKEY_POLY1305,
|
||||
EVP_PKEY_POLY1305,
|
||||
@@ -63,5 +85,17 @@ const EVP_PKEY_ASN1_METHOD poly1305_asn1_meth = {
|
||||
|
||||
poly1305_key_free,
|
||||
poly1305_pkey_ctrl,
|
||||
0, 0
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
poly1305_set_priv_key,
|
||||
NULL,
|
||||
};
|
||||
@@ -20,30 +20,31 @@
|
||||
* for x86_64 code. And since we are at it, just for sense of it,
|
||||
* large-block performance in cycles per processed byte for *this* code
|
||||
* is:
|
||||
* gcc-4.8 icc-15.0 clang-3.4(*)
|
||||
* gcc-4.8 icc-15.0 clang-3.4(*)
|
||||
*
|
||||
* Westmere 4.96 5.09 4.37
|
||||
* Sandy Bridge 4.95 4.90 4.17
|
||||
* Haswell 4.92 4.87 3.78
|
||||
* Bulldozer 4.67 4.49 4.68
|
||||
* VIA Nano 7.07 7.05 5.98
|
||||
* Silvermont 10.6 9.61 12.6
|
||||
* Westmere 4.96 5.09 4.37
|
||||
* Sandy Bridge 4.95 4.90 4.17
|
||||
* Haswell 4.92 4.87 3.78
|
||||
* Bulldozer 4.67 4.49 4.68
|
||||
* VIA Nano 7.07 7.05 5.98
|
||||
* Silvermont 10.6 9.61 12.6
|
||||
*
|
||||
* (*) clang managed to discover parallelism and deployed SIMD;
|
||||
* (*) clang managed to discover parallelism and deployed SIMD;
|
||||
*
|
||||
* And for range of other platforms with unspecified gcc versions:
|
||||
*
|
||||
* Freescale e300 12.5
|
||||
* PPC74x0 10.8
|
||||
* POWER6 4.92
|
||||
* POWER7 4.50
|
||||
* POWER8 4.10
|
||||
* Freescale e300 12.5
|
||||
* PPC74x0 10.8
|
||||
* POWER6 4.92
|
||||
* POWER7 4.50
|
||||
* POWER8 4.10
|
||||
* POWER9 3.14
|
||||
*
|
||||
* z10 11.2
|
||||
* z196+ 7.30
|
||||
* z10 11.2
|
||||
* z196+ 7.30
|
||||
*
|
||||
* UltraSPARC III 16.0
|
||||
* SPARC T4 16.1
|
||||
* UltraSPARC III 16.0
|
||||
* SPARC T4 16.1
|
||||
*/
|
||||
|
||||
#if !(defined(__GNUC__) && __GNUC__>=2)
|
||||
@@ -57,33 +58,33 @@ typedef unsigned int u32;
|
||||
typedef unsigned long long u64;
|
||||
typedef union { double d; u64 u; } elem64;
|
||||
|
||||
#define TWO(p) ((double)(1ULL<<(p)))
|
||||
#define TWO0 TWO(0)
|
||||
#define TWO32 TWO(32)
|
||||
#define TWO64 (TWO32*TWO(32))
|
||||
#define TWO96 (TWO64*TWO(32))
|
||||
#define TWO130 (TWO96*TWO(34))
|
||||
#define TWO(p) ((double)(1ULL<<(p)))
|
||||
#define TWO0 TWO(0)
|
||||
#define TWO32 TWO(32)
|
||||
#define TWO64 (TWO32*TWO(32))
|
||||
#define TWO96 (TWO64*TWO(32))
|
||||
#define TWO130 (TWO96*TWO(34))
|
||||
|
||||
#define EXP(p) ((1023ULL+(p))<<52)
|
||||
#define EXP(p) ((1023ULL+(p))<<52)
|
||||
|
||||
#if defined(__x86_64__) || (defined(__PPC__) && defined(__LITTLE_ENDIAN__))
|
||||
# define U8TOU32(p) (*(const u32 *)(p))
|
||||
# define U32TO8(p,v) (*(u32 *)(p) = (v))
|
||||
# define U8TOU32(p) (*(const u32 *)(p))
|
||||
# define U32TO8(p,v) (*(u32 *)(p) = (v))
|
||||
#elif defined(__PPC__)
|
||||
# define U8TOU32(p) ({u32 ret; asm ("lwbrx %0,0,%1":"=r"(ret):"b"(p)); ret; })
|
||||
# define U32TO8(p,v) asm ("stwbrx %0,0,%1"::"r"(v),"b"(p):"memory")
|
||||
# define U8TOU32(p) ({u32 ret; asm ("lwbrx %0,0,%1":"=r"(ret):"b"(p)); ret; })
|
||||
# define U32TO8(p,v) asm ("stwbrx %0,0,%1"::"r"(v),"b"(p):"memory")
|
||||
#elif defined(__s390x__)
|
||||
# define U8TOU32(p) ({u32 ret; asm ("lrv %0,%1":"=d"(ret):"m"(*(u32 *)(p))); ret; })
|
||||
# define U32TO8(p,v) asm ("strv %1,%0":"=m"(*(u32 *)(p)):"d"(v))
|
||||
# define U8TOU32(p) ({u32 ret; asm ("lrv %0,%1":"=d"(ret):"m"(*(u32 *)(p))); ret; })
|
||||
# define U32TO8(p,v) asm ("strv %1,%0":"=m"(*(u32 *)(p)):"d"(v))
|
||||
#endif
|
||||
|
||||
#ifndef U8TOU32
|
||||
# define U8TOU32(p) ((u32)(p)[0] | (u32)(p)[1]<<8 | \
|
||||
(u32)(p)[2]<<16 | (u32)(p)[3]<<24 )
|
||||
# define U8TOU32(p) ((u32)(p)[0] | (u32)(p)[1]<<8 | \
|
||||
(u32)(p)[2]<<16 | (u32)(p)[3]<<24 )
|
||||
#endif
|
||||
#ifndef U32TO8
|
||||
# define U32TO8(p,v) ((p)[0] = (u8)(v), (p)[1] = (u8)((v)>>8), \
|
||||
(p)[2] = (u8)((v)>>16), (p)[3] = (u8)((v)>>24) )
|
||||
# define U32TO8(p,v) ((p)[0] = (u8)(v), (p)[1] = (u8)((v)>>8), \
|
||||
(p)[2] = (u8)((v)>>16), (p)[3] = (u8)((v)>>24) )
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
@@ -359,9 +360,9 @@ void poly1305_blocks(void *ctx, const unsigned char *inp, size_t len,
|
||||
#ifndef __clang__
|
||||
fast_entry:
|
||||
#endif
|
||||
/*
|
||||
* base 2^32 * base 2^16 = base 2^48
|
||||
*/
|
||||
/*
|
||||
* base 2^32 * base 2^16 = base 2^48
|
||||
*/
|
||||
h0lo = s3lo * x1 + s2lo * x2 + s1lo * x3 + r0lo * x0;
|
||||
h1lo = r0lo * x1 + s3lo * x2 + s2lo * x3 + r1lo * x0;
|
||||
h2lo = r1lo * x1 + r0lo * x2 + s3lo * x3 + r2lo * x0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2007-2017 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright 2007-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <openssl/x509.h>
|
||||
#include <openssl/x509v3.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/err.h>
|
||||
#include "internal/poly1305.h"
|
||||
#include "poly1305_local.h"
|
||||
#include "internal/evp_int.h"
|
||||
@@ -27,9 +28,10 @@ static int pkey_poly1305_init(EVP_PKEY_CTX *ctx)
|
||||
{
|
||||
POLY1305_PKEY_CTX *pctx;
|
||||
|
||||
pctx = OPENSSL_zalloc(sizeof(*pctx));
|
||||
if (pctx == NULL)
|
||||
if ((pctx = OPENSSL_zalloc(sizeof(*pctx))) == NULL) {
|
||||
CRYPTOerr(CRYPTO_F_PKEY_POLY1305_INIT, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
pctx->ktmp.type = V_ASN1_OCTET_STRING;
|
||||
|
||||
EVP_PKEY_CTX_set_data(ctx, pctx);
|
||||
|
||||
Reference in New Issue
Block a user