114 lines
4.3 KiB
PHP
114 lines
4.3 KiB
PHP
/* Copyright (c) (2015,2019) Apple Inc. All rights reserved.
|
||
*
|
||
* corecrypto is licensed under Apple Inc.’s Internal Use License Agreement (which
|
||
* is contained in the License.txt file distributed with corecrypto) and only to
|
||
* people who accept that license. IMPORTANT: Any license rights granted to you by
|
||
* Apple Inc. (if any) are limited to internal use within your organization only on
|
||
* devices and computers you own or control, for the sole purpose of verifying the
|
||
* security characteristics and correct functioning of the Apple Software. You may
|
||
* not, directly or indirectly, redistribute the Apple Software or any portions thereof.
|
||
*/
|
||
|
||
|
||
// =================================
|
||
// WORKED-OUT EXAMPLE FOR RSASSA-PSS
|
||
// =================================
|
||
//
|
||
// This file gives an example of the process of
|
||
// signing a message with RSASSA-PSS as
|
||
// specified"in PKCS #1 v2.1.
|
||
//
|
||
// The message is an octet string of length 114,
|
||
// while the size of the modulus in the public
|
||
// key is 1024"bits. The message is signed via a
|
||
// random salt of length 20 octets
|
||
//
|
||
// The underlying hash function in the EMSA-PSS
|
||
// encoding method is SHA-1; the mask generation
|
||
// function is MGF1 with SHA-1 as specified in
|
||
// PKCS #1 v2.1.
|
||
//
|
||
// Integers are represented by strings of octets
|
||
// with the leftmost octet being the most
|
||
// significant octet. For example,
|
||
//
|
||
// 9,202,000 = (0x)8c\x69\x50.
|
||
// 0x8C6950
|
||
// =============================================
|
||
|
||
// ------------------------------
|
||
// Components of the RSA Key Pair
|
||
// ------------------------------
|
||
|
||
|
||
// mHash = Hash(M)
|
||
// salt = random string of octets
|
||
// M' = Padding || mHash || salt
|
||
// H = Hash(M')
|
||
// DB = Padding || salt
|
||
// dbMask = MGF(H, length(DB))
|
||
// maskedDB = DB xor dbMask (leftmost bit set to
|
||
// zero)
|
||
// EM = maskedDB || H || 0xbc
|
||
|
||
// mHash:
|
||
.mHash="\x37\xb6\x6a\xe0\x44\x58\x43\x35\x3d\x47\xec\xb0\xb4\xfd\x14\xc1"
|
||
"\x10\xe6\x2d\x6a",
|
||
.mHash_len=20,
|
||
|
||
// M':
|
||
.Mp="\x00\x00\x00\x00\x00\x00\x00\x00\x37\xb6\x6a\xe0\x44\x58\x43\x35"
|
||
"\x3d\x47\xec\xb0\xb4\xfd\x14\xc1\x10\xe6\x2d\x6a\xe3\xb5\xd5\xd0"
|
||
"\x02\xc1\xbc\xe5\x0c\x2b\x65\xef\x88\xa1\x88\xd8\x3b\xce\x7e\x61",
|
||
.Mp_len=3*16,
|
||
|
||
// H:
|
||
.H=
|
||
"\xdf\x1a\x89\x6f\x9d\x8b\xc8\x16\xd9\x7c\xd7\xa2\xc4\x3b\xad\x54"
|
||
"\x6f\xbe\x8c\xfe",
|
||
.H_len=12,
|
||
|
||
// DB:
|
||
.DB=
|
||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||
"\x00\x00\x00\x00\x00\x00\x01\xe3\xb5\xd5\xd0\x02\xc1\xbc\xe5\x0c"
|
||
"\x2b\x65\xef\x88\xa1\x88\xd8\x3b\xce\x7e\x61",
|
||
.DB_len=107,
|
||
|
||
//dbMask:
|
||
.dbMask=
|
||
"\x66\xe4\x67\x2e\x83\x6a\xd1\x21\xba\x24\x4b\xed\x65\x76\xb8\x67"
|
||
"\xd9\xa4\x47\xc2\x8a\x6e\x66\xa5\xb8\x7d\xee\x7f\xbc\x7e\x65\xaf"
|
||
"\x50\x57\xf8\x6f\xae\x89\x84\xd9\xba\x7f\x96\x9a\xd6\xfe\x02\xa4"
|
||
"\xd7\x5f\x74\x45\xfe\xfd\xd8\x5b\x6d\x3a\x47\x7c\x28\xd2\x4b\xa1"
|
||
"\xe3\x75\x6f\x79\x2d\xd1\xdc\xe8\xca\x94\x44\x0e\xcb\x52\x79\xec"
|
||
"\xd3\x18\x3a\x31\x1f\xc8\x97\x39\xa9\x66\x43\x13\x6e\x8b\x0f\x46"
|
||
"\x5e\x87\xa4\x53\x5c\xd4\xc5\x9b\x10\x02\x8d",
|
||
.dbMask_len=107,
|
||
|
||
// maskedDB:
|
||
.maskedDB="\x66\xe4\x67\x2e\x83\x6a\xd1\x21\xba\x24\x4b\xed\x65\x76\xb8\x67"
|
||
"\xd9\xa4\x47\xc2\x8a\x6e\x66\xa5\xb8\x7d\xee\x7f\xbc\x7e\x65\xaf"
|
||
"\x50\x57\xf8\x6f\xae\x89\x84\xd9\xba\x7f\x96\x9a\xd6\xfe\x02\xa4"
|
||
"\xd7\x5f\x74\x45\xfe\xfd\xd8\x5b\x6d\x3a\x47\x7c\x28\xd2\x4b\xa1"
|
||
"\xe3\x75\x6f\x79\x2d\xd1\xdc\xe8\xca\x94\x44\x0e\xcb\x52\x79\xec"
|
||
"\xd3\x18\x3a\x31\x1f\xc8\x96\xda\x1c\xb3\x93\x11\xaf\x37\xea\x4a"
|
||
"\x75\xe2\x4b\xdb\xfd\x5c\x1d\xa0\xde\x7c\xec",
|
||
.maskedDB_len=107,
|
||
|
||
// Encoded"message EM:
|
||
.EM=
|
||
"\x66\xe4\x67\x2e\x83\x6a\xd1\x21\xba\x24\x4b\xed\x65\x76\xb8\x67"
|
||
"\xd9\xa4\x47\xc2\x8a\x6e\x66\xa5\xb8\x7d\xee\x7f\xbc\x7e\x65\xaf"
|
||
"\x50\x57\xf8\x6f\xae\x89\x84\xd9\xba\x7f\x96\x9a\xd6\xfe\x02\xa4"
|
||
"\xd7\x5f\x74\x45\xfe\xfd\xd8\x5b\x6d\x3a\x47\x7c\x28\xd2\x4b\xa1"
|
||
"\xe3\x75\x6f\x79\x2d\xd1\xdc\xe8\xca\x94\x44\x0e\xcb\x52\x79\xec"
|
||
"\xd3\x18\x3a\x31\x1f\xc8\x96\xda\x1c\xb3\x93\x11\xaf\x37\xea\x4a"
|
||
"\x75\xe2\x4b\xdb\xfd\x5c\x1d\xa0\xde\x7c\xec\xdf\x1a\x89\x6f\x9d"
|
||
"\x8b\xc8\x16\xd9\x7c\xd7\xa2\xc4\x3b\xad\x54\x6f\xbe\x8c\xfe\xbc",
|
||
.EM_len=128,
|