mirror of https://github.com/postgres/postgres
This way both frontend and backends can use them. The functions are taken from pgcrypto, which now fetches the source files it needs from src/common/. A new interface is designed for the SHA2 functions, which allow linking to either OpenSSL or the in-core stuff taken from KAME as needed. Michael Paquier, reviewed by Robert Haas. Discussion: https://www.postgresql.org/message-id/CAB7nPqTGKuTM5jiZriHrNaQeVqp5e_iT3X4BFLWY_HyHxLvySQ%40mail.gmail.compull/17/merge
parent
330b84d8c4
commit
273c458a2b
@ -1,100 +0,0 @@ |
||||
/* contrib/pgcrypto/sha2.h */ |
||||
/* $OpenBSD: sha2.h,v 1.2 2004/04/28 23:11:57 millert Exp $ */ |
||||
|
||||
/*
|
||||
* FILE: sha2.h |
||||
* AUTHOR: Aaron D. Gifford <me@aarongifford.com> |
||||
* |
||||
* Copyright (c) 2000-2001, Aaron D. Gifford |
||||
* 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. |
||||
* 3. Neither the name of the copyright holder nor the names of contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``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 AUTHOR OR CONTRIBUTOR(S) 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. |
||||
* |
||||
* $From: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $ |
||||
*/ |
||||
|
||||
#ifndef _SHA2_H |
||||
#define _SHA2_H |
||||
|
||||
/* avoid conflict with OpenSSL */ |
||||
#define SHA256_Init pg_SHA256_Init |
||||
#define SHA256_Update pg_SHA256_Update |
||||
#define SHA256_Final pg_SHA256_Final |
||||
#define SHA384_Init pg_SHA384_Init |
||||
#define SHA384_Update pg_SHA384_Update |
||||
#define SHA384_Final pg_SHA384_Final |
||||
#define SHA512_Init pg_SHA512_Init |
||||
#define SHA512_Update pg_SHA512_Update |
||||
#define SHA512_Final pg_SHA512_Final |
||||
|
||||
/*** SHA-224/256/384/512 Various Length Definitions ***********************/ |
||||
#define SHA224_BLOCK_LENGTH 64 |
||||
#define SHA224_DIGEST_LENGTH 28 |
||||
#define SHA224_DIGEST_STRING_LENGTH (SHA224_DIGEST_LENGTH * 2 + 1) |
||||
#define SHA256_BLOCK_LENGTH 64 |
||||
#define SHA256_DIGEST_LENGTH 32 |
||||
#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1) |
||||
#define SHA384_BLOCK_LENGTH 128 |
||||
#define SHA384_DIGEST_LENGTH 48 |
||||
#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1) |
||||
#define SHA512_BLOCK_LENGTH 128 |
||||
#define SHA512_DIGEST_LENGTH 64 |
||||
#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) |
||||
|
||||
|
||||
/*** SHA-256/384/512 Context Structures *******************************/ |
||||
typedef struct _SHA256_CTX |
||||
{ |
||||
uint32 state[8]; |
||||
uint64 bitcount; |
||||
uint8 buffer[SHA256_BLOCK_LENGTH]; |
||||
} SHA256_CTX; |
||||
typedef struct _SHA512_CTX |
||||
{ |
||||
uint64 state[8]; |
||||
uint64 bitcount[2]; |
||||
uint8 buffer[SHA512_BLOCK_LENGTH]; |
||||
} SHA512_CTX; |
||||
|
||||
typedef SHA256_CTX SHA224_CTX; |
||||
typedef SHA512_CTX SHA384_CTX; |
||||
|
||||
void SHA224_Init(SHA224_CTX *); |
||||
void SHA224_Update(SHA224_CTX *, const uint8 *, size_t); |
||||
void SHA224_Final(uint8[SHA224_DIGEST_LENGTH], SHA224_CTX *); |
||||
|
||||
void SHA256_Init(SHA256_CTX *); |
||||
void SHA256_Update(SHA256_CTX *, const uint8 *, size_t); |
||||
void SHA256_Final(uint8[SHA256_DIGEST_LENGTH], SHA256_CTX *); |
||||
|
||||
void SHA384_Init(SHA384_CTX *); |
||||
void SHA384_Update(SHA384_CTX *, const uint8 *, size_t); |
||||
void SHA384_Final(uint8[SHA384_DIGEST_LENGTH], SHA384_CTX *); |
||||
|
||||
void SHA512_Init(SHA512_CTX *); |
||||
void SHA512_Update(SHA512_CTX *, const uint8 *, size_t); |
||||
void SHA512_Final(uint8[SHA512_DIGEST_LENGTH], SHA512_CTX *); |
||||
|
||||
#endif /* _SHA2_H */ |
@ -0,0 +1,102 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* sha2_openssl.c |
||||
* Set of wrapper routines on top of OpenSSL to support SHA-224 |
||||
* SHA-256, SHA-384 and SHA-512 functions. |
||||
* |
||||
* This should only be used if code is compiled with OpenSSL support. |
||||
* |
||||
* Portions Copyright (c) 2016, PostgreSQL Global Development Group |
||||
* |
||||
* IDENTIFICATION |
||||
* src/common/sha2_openssl.c |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#ifndef FRONTEND |
||||
#include "postgres.h" |
||||
#else |
||||
#include "postgres_fe.h" |
||||
#endif |
||||
|
||||
#include <openssl/sha.h> |
||||
|
||||
#include "common/sha2.h" |
||||
|
||||
|
||||
/* Interface routines for SHA-256 */ |
||||
void |
||||
pg_sha256_init(pg_sha256_ctx *ctx) |
||||
{ |
||||
SHA256_Init((SHA256_CTX *) ctx); |
||||
} |
||||
|
||||
void |
||||
pg_sha256_update(pg_sha256_ctx *ctx, const uint8 *data, size_t len) |
||||
{ |
||||
SHA256_Update((SHA256_CTX *) ctx, data, len); |
||||
} |
||||
|
||||
void |
||||
pg_sha256_final(pg_sha256_ctx *ctx, uint8 *dest) |
||||
{ |
||||
SHA256_Final(dest, (SHA256_CTX *) ctx); |
||||
} |
||||
|
||||
/* Interface routines for SHA-512 */ |
||||
void |
||||
pg_sha512_init(pg_sha512_ctx *ctx) |
||||
{ |
||||
SHA512_Init((SHA512_CTX *) ctx); |
||||
} |
||||
|
||||
void |
||||
pg_sha512_update(pg_sha512_ctx *ctx, const uint8 *data, size_t len) |
||||
{ |
||||
SHA512_Update((SHA512_CTX *) ctx, data, len); |
||||
} |
||||
|
||||
void |
||||
pg_sha512_final(pg_sha512_ctx *ctx, uint8 *dest) |
||||
{ |
||||
SHA512_Final(dest, (SHA512_CTX *) ctx); |
||||
} |
||||
|
||||
/* Interface routines for SHA-384 */ |
||||
void |
||||
pg_sha384_init(pg_sha384_ctx *ctx) |
||||
{ |
||||
SHA384_Init((SHA512_CTX *) ctx); |
||||
} |
||||
|
||||
void |
||||
pg_sha384_update(pg_sha384_ctx *ctx, const uint8 *data, size_t len) |
||||
{ |
||||
SHA384_Update((SHA512_CTX *) ctx, data, len); |
||||
} |
||||
|
||||
void |
||||
pg_sha384_final(pg_sha384_ctx *ctx, uint8 *dest) |
||||
{ |
||||
SHA384_Final(dest, (SHA512_CTX *) ctx); |
||||
} |
||||
|
||||
/* Interface routines for SHA-224 */ |
||||
void |
||||
pg_sha224_init(pg_sha224_ctx *ctx) |
||||
{ |
||||
SHA224_Init((SHA256_CTX *) ctx); |
||||
} |
||||
|
||||
void |
||||
pg_sha224_update(pg_sha224_ctx *ctx, const uint8 *data, size_t len) |
||||
{ |
||||
SHA224_Update((SHA256_CTX *) ctx, data, len); |
||||
} |
||||
|
||||
void |
||||
pg_sha224_final(pg_sha224_ctx *ctx, uint8 *dest) |
||||
{ |
||||
SHA224_Final(dest, (SHA256_CTX *) ctx); |
||||
} |
@ -0,0 +1,115 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* sha2.h |
||||
* Generic headers for SHA224, 256, 384 AND 512 functions of PostgreSQL. |
||||
* |
||||
* Portions Copyright (c) 2016, PostgreSQL Global Development Group |
||||
* |
||||
* IDENTIFICATION |
||||
* src/include/common/sha2.h |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
/* $OpenBSD: sha2.h,v 1.2 2004/04/28 23:11:57 millert Exp $ */ |
||||
|
||||
/*
|
||||
* FILE: sha2.h |
||||
* AUTHOR: Aaron D. Gifford <me@aarongifford.com> |
||||
* |
||||
* Copyright (c) 2000-2001, Aaron D. Gifford |
||||
* 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. |
||||
* 3. Neither the name of the copyright holder nor the names of contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``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 AUTHOR OR CONTRIBUTOR(S) 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. |
||||
* |
||||
* $From: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $ |
||||
*/ |
||||
|
||||
#ifndef _PG_SHA2_H_ |
||||
#define _PG_SHA2_H_ |
||||
|
||||
#ifdef USE_SSL |
||||
#include <openssl/sha.h> |
||||
#endif |
||||
|
||||
/*** SHA224/256/384/512 Various Length Definitions ***********************/ |
||||
#define PG_SHA224_BLOCK_LENGTH 64 |
||||
#define PG_SHA224_DIGEST_LENGTH 28 |
||||
#define PG_SHA224_DIGEST_STRING_LENGTH (PG_SHA224_DIGEST_LENGTH * 2 + 1) |
||||
#define PG_SHA256_BLOCK_LENGTH 64 |
||||
#define PG_SHA256_DIGEST_LENGTH 32 |
||||
#define PG_SHA256_DIGEST_STRING_LENGTH (PG_SHA256_DIGEST_LENGTH * 2 + 1) |
||||
#define PG_SHA384_BLOCK_LENGTH 128 |
||||
#define PG_SHA384_DIGEST_LENGTH 48 |
||||
#define PG_SHA384_DIGEST_STRING_LENGTH (PG_SHA384_DIGEST_LENGTH * 2 + 1) |
||||
#define PG_SHA512_BLOCK_LENGTH 128 |
||||
#define PG_SHA512_DIGEST_LENGTH 64 |
||||
#define PG_SHA512_DIGEST_STRING_LENGTH (PG_SHA512_DIGEST_LENGTH * 2 + 1) |
||||
|
||||
/* Context Structures for SHA-1/224/256/384/512 */ |
||||
#ifdef USE_SSL |
||||
typedef SHA256_CTX pg_sha256_ctx; |
||||
typedef SHA512_CTX pg_sha512_ctx; |
||||
typedef SHA256_CTX pg_sha224_ctx; |
||||
typedef SHA512_CTX pg_sha384_ctx; |
||||
#else |
||||
typedef struct pg_sha256_ctx |
||||
{ |
||||
uint32 state[8]; |
||||
uint64 bitcount; |
||||
uint8 buffer[PG_SHA256_BLOCK_LENGTH]; |
||||
} pg_sha256_ctx; |
||||
typedef struct pg_sha512_ctx |
||||
{ |
||||
uint64 state[8]; |
||||
uint64 bitcount[2]; |
||||
uint8 buffer[PG_SHA512_BLOCK_LENGTH]; |
||||
} pg_sha512_ctx; |
||||
typedef struct pg_sha256_ctx pg_sha224_ctx; |
||||
typedef struct pg_sha512_ctx pg_sha384_ctx; |
||||
#endif /* USE_SSL */ |
||||
|
||||
/* Interface routines for SHA224/256/384/512 */ |
||||
extern void pg_sha224_init(pg_sha224_ctx *ctx); |
||||
extern void pg_sha224_update(pg_sha224_ctx *ctx, const uint8 *input0, |
||||
size_t len); |
||||
extern void pg_sha224_final(pg_sha224_ctx *ctx, uint8 *dest); |
||||
|
||||
extern void pg_sha256_init(pg_sha256_ctx *ctx); |
||||
extern void pg_sha256_update(pg_sha256_ctx *ctx, const uint8 *input0, |
||||
size_t len); |
||||
extern void pg_sha256_final(pg_sha256_ctx *ctx, uint8 *dest); |
||||
|
||||
extern void pg_sha384_init(pg_sha384_ctx *ctx); |
||||
extern void pg_sha384_update(pg_sha384_ctx *ctx, |
||||
const uint8 *, size_t len); |
||||
extern void pg_sha384_final(pg_sha384_ctx *ctx, uint8 *dest); |
||||
|
||||
extern void pg_sha512_init(pg_sha512_ctx *ctx); |
||||
extern void pg_sha512_update(pg_sha512_ctx *ctx, const uint8 *input0, |
||||
size_t len); |
||||
extern void pg_sha512_final(pg_sha512_ctx *ctx, uint8 *dest); |
||||
|
||||
#endif /* _PG_SHA2_H_ */ |
Loading…
Reference in new issue