From 1b757b3ca51ec9acc27a25eaa755ecb44f25dc40 Mon Sep 17 00:00:00 2001 From: jsing <> Date: Thu, 7 May 2026 15:50:47 +0000 Subject: Use macros for global functions and objects within SHA assembly. This lets us remove some of the repetitive statements and allows for them to be adjusted for various platforms. ok kenjiro@ tb@ --- src/lib/libcrypto/crypto_assembly.h | 24 +++++++++++++++++++++++- src/lib/libcrypto/sha/sha1_aarch64_ce.S | 6 ++---- src/lib/libcrypto/sha/sha1_amd64_generic.S | 6 ++---- src/lib/libcrypto/sha/sha1_amd64_shani.S | 11 ++++------- src/lib/libcrypto/sha/sha256_aarch64_ce.S | 11 ++++------- src/lib/libcrypto/sha/sha256_amd64_generic.S | 11 ++++------- src/lib/libcrypto/sha/sha256_amd64_shani.S | 16 ++++++---------- src/lib/libcrypto/sha/sha512_aarch64_ce.S | 10 ++++------ src/lib/libcrypto/sha/sha512_amd64_generic.S | 11 ++++------- 9 files changed, 53 insertions(+), 53 deletions(-) (limited to 'src/lib/libcrypto') diff --git a/src/lib/libcrypto/crypto_assembly.h b/src/lib/libcrypto/crypto_assembly.h index 22102d3fac..e42ed947dd 100644 --- a/src/lib/libcrypto/crypto_assembly.h +++ b/src/lib/libcrypto/crypto_assembly.h @@ -1,4 +1,4 @@ -/* $OpenBSD: crypto_assembly.h,v 1.4 2026/05/07 15:41:37 jsing Exp $ */ +/* $OpenBSD: crypto_assembly.h,v 1.5 2026/05/07 15:50:47 jsing Exp $ */ /* * Copyright (c) 2026 Joel Sing * @@ -37,6 +37,11 @@ #define CRYPTO_ASSEMBLY_SECTION_TEXT __TEXT,__text #define CRYPTO_ASSEMBLY_SECTION_RODATA __DATA,__const +#define CRYPTO_ASSEMBLY_SYMBOL_NAME(name) _name +#define CRYPTO_ASSEMBLY_TYPE_FUNCTION(name) +#define CRYPTO_ASSEMBLY_TYPE_OBJECT(name) +#define CRYPTO_ASSEMBLY_OBJECT_SIZE(name) + #define CRYPTO_ASSEMBLY_AARCH64_SYM_HI(name) name@PAGE #define CRYPTO_ASSEMBLY_AARCH64_SYM_LO(name) name@PAGEOFF @@ -44,8 +49,25 @@ #define CRYPTO_ASSEMBLY_SECTION_TEXT .text #define CRYPTO_ASSEMBLY_SECTION_RODATA .rodata +#define CRYPTO_ASSEMBLY_SYMBOL_NAME(name) name +#define CRYPTO_ASSEMBLY_TYPE_FUNCTION(name) .type name,@function +#define CRYPTO_ASSEMBLY_TYPE_OBJECT(name) .type name,@object +#define CRYPTO_ASSEMBLY_OBJECT_SIZE(name) .size name,.-name + #define CRYPTO_ASSEMBLY_AARCH64_SYM_HI(name) name #define CRYPTO_ASSEMBLY_AARCH64_SYM_LO(name) :lo12:name #endif +#define CRYPTO_ASSEMBLY_GLOBAL_FUNCTION(name) \ + .global CRYPTO_ASSEMBLY_SYMBOL_NAME(name) CRYPTO_ASSEMBLY_SEPARATOR \ + CRYPTO_ASSEMBLY_TYPE_FUNCTION(name) CRYPTO_ASSEMBLY_SEPARATOR \ + CRYPTO_ASSEMBLY_SYMBOL_NAME(name) + +#define CRYPTO_ASSEMBLY_OBJECT_START(name) \ + CRYPTO_ASSEMBLY_TYPE_OBJECT(name) CRYPTO_ASSEMBLY_SEPARATOR \ + name + +#define CRYPTO_ASSEMBLY_OBJECT_END(name) \ + CRYPTO_ASSEMBLY_OBJECT_SIZE(name) + #endif diff --git a/src/lib/libcrypto/sha/sha1_aarch64_ce.S b/src/lib/libcrypto/sha/sha1_aarch64_ce.S index 53dcd46fda..85fefb9ccf 100644 --- a/src/lib/libcrypto/sha/sha1_aarch64_ce.S +++ b/src/lib/libcrypto/sha/sha1_aarch64_ce.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sha1_aarch64_ce.S,v 1.7 2026/05/07 15:40:33 jsing Exp $ */ +/* $OpenBSD: sha1_aarch64_ce.S,v 1.8 2026/05/07 15:50:47 jsing Exp $ */ /* * Copyright (c) 2023,2025 Joel Sing * @@ -111,9 +111,7 @@ * * Standard ARM ABI: x0 = ctx, x1 = in, x2 = num */ -.globl sha1_block_ce -.type sha1_block_ce,@function -sha1_block_ce: +CRYPTO_ASSEMBLY_GLOBAL_FUNCTION(sha1_block_ce): /* * Load SHA-1 round constants. diff --git a/src/lib/libcrypto/sha/sha1_amd64_generic.S b/src/lib/libcrypto/sha/sha1_amd64_generic.S index a44bd2fdec..a0473bdd00 100644 --- a/src/lib/libcrypto/sha/sha1_amd64_generic.S +++ b/src/lib/libcrypto/sha/sha1_amd64_generic.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sha1_amd64_generic.S,v 1.6 2026/05/07 15:38:03 jsing Exp $ */ +/* $OpenBSD: sha1_amd64_generic.S,v 1.7 2026/05/07 15:50:47 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -162,9 +162,7 @@ * Standard x86-64 ABI: rdi = ctx, rsi = in, rdx = num */ .align 16 -.globl sha1_block_generic -.type sha1_block_generic,@function -sha1_block_generic: +CRYPTO_ASSEMBLY_GLOBAL_FUNCTION(sha1_block_generic): _CET_ENDBR /* Save callee save registers. */ diff --git a/src/lib/libcrypto/sha/sha1_amd64_shani.S b/src/lib/libcrypto/sha/sha1_amd64_shani.S index f957238f80..4814778343 100644 --- a/src/lib/libcrypto/sha/sha1_amd64_shani.S +++ b/src/lib/libcrypto/sha/sha1_amd64_shani.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sha1_amd64_shani.S,v 1.6 2026/05/07 15:40:33 jsing Exp $ */ +/* $OpenBSD: sha1_amd64_shani.S,v 1.7 2026/05/07 15:50:47 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -77,9 +77,7 @@ * Standard x86-64 ABI: rdi = ctx, rsi = in, rdx = num */ .align 16 -.globl sha1_block_shani -.type sha1_block_shani,@function -sha1_block_shani: +CRYPTO_ASSEMBLY_GLOBAL_FUNCTION(sha1_block_shani): _CET_ENDBR /* Save callee save registers. */ @@ -162,7 +160,6 @@ sha1_block_shani: * and reordering to abcd. */ .align 16 -.type shufmask,@object -shufmask: +CRYPTO_ASSEMBLY_OBJECT_START(shufmask): .octa 0x000102030405060708090a0b0c0d0e0f -.size shufmask,.-shufmask +CRYPTO_ASSEMBLY_OBJECT_END(shufmask) diff --git a/src/lib/libcrypto/sha/sha256_aarch64_ce.S b/src/lib/libcrypto/sha/sha256_aarch64_ce.S index c08ba27e9f..991f1316c0 100644 --- a/src/lib/libcrypto/sha/sha256_aarch64_ce.S +++ b/src/lib/libcrypto/sha/sha256_aarch64_ce.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sha256_aarch64_ce.S,v 1.9 2026/05/07 15:41:37 jsing Exp $ */ +/* $OpenBSD: sha256_aarch64_ce.S,v 1.10 2026/05/07 15:50:47 jsing Exp $ */ /* * Copyright (c) 2023,2025 Joel Sing * @@ -102,9 +102,7 @@ * * Standard ARM ABI: x0 = ctx, x1 = in, x2 = num */ -.globl sha256_block_ce -.type sha256_block_ce,@function -sha256_block_ce: +CRYPTO_ASSEMBLY_GLOBAL_FUNCTION(sha256_block_ce): /* Address of SHA-256 constants. */ adrp k256_base, CRYPTO_ASSEMBLY_AARCH64_SYM_HI(K256) @@ -180,8 +178,7 @@ sha256_block_ce: * SHA-256 constants - see FIPS 180-4 section 4.2.3. */ .align 4 -.type K256,@object -K256: +CRYPTO_ASSEMBLY_OBJECT_START(K256): .long 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5 .long 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5 .long 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3 @@ -198,4 +195,4 @@ K256: .long 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3 .long 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208 .long 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -.size K256,.-K256 +CRYPTO_ASSEMBLY_OBJECT_END(K256) diff --git a/src/lib/libcrypto/sha/sha256_amd64_generic.S b/src/lib/libcrypto/sha/sha256_amd64_generic.S index aa098a0991..0d0e2b75d2 100644 --- a/src/lib/libcrypto/sha/sha256_amd64_generic.S +++ b/src/lib/libcrypto/sha/sha256_amd64_generic.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sha256_amd64_generic.S,v 1.8 2026/05/07 15:40:33 jsing Exp $ */ +/* $OpenBSD: sha256_amd64_generic.S,v 1.9 2026/05/07 15:50:47 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -149,9 +149,7 @@ * Standard x86-64 ABI: rdi = ctx, rsi = in, rdx = num */ .align 16 -.globl sha256_block_generic -.type sha256_block_generic,@function -sha256_block_generic: +CRYPTO_ASSEMBLY_GLOBAL_FUNCTION(sha256_block_generic): _CET_ENDBR /* Save callee save registers. */ @@ -280,8 +278,7 @@ sha256_block_generic: * SHA-256 constants - see FIPS 180-4 section 4.2.2. */ .align 64 -.type K256,@object -K256: +CRYPTO_ASSEMBLY_OBJECT_START(K256): .long 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5 .long 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5 .long 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3 @@ -298,4 +295,4 @@ K256: .long 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3 .long 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208 .long 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -.size K256,.-K256 +CRYPTO_ASSEMBLY_OBJECT_END(K256) diff --git a/src/lib/libcrypto/sha/sha256_amd64_shani.S b/src/lib/libcrypto/sha/sha256_amd64_shani.S index 10861ee7b6..91f22e44d6 100644 --- a/src/lib/libcrypto/sha/sha256_amd64_shani.S +++ b/src/lib/libcrypto/sha/sha256_amd64_shani.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sha256_amd64_shani.S,v 1.6 2026/05/07 15:40:33 jsing Exp $ */ +/* $OpenBSD: sha256_amd64_shani.S,v 1.7 2026/05/07 15:50:47 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -86,9 +86,7 @@ * Standard x86-64 ABI: rdi = ctx, rsi = in, rdx = num */ .align 16 -.globl sha256_block_shani -.type sha256_block_shani,@function -sha256_block_shani: +CRYPTO_ASSEMBLY_GLOBAL_FUNCTION(sha256_block_shani): _CET_ENDBR /* Save callee save registers. */ @@ -177,17 +175,15 @@ sha256_block_shani: * Shuffle mask - little endian to big endian word conversion. */ .align 16 -.type shufmask,@object -shufmask: +CRYPTO_ASSEMBLY_OBJECT_START(shufmask): .octa 0x0c0d0e0f08090a0b0405060700010203 -.size shufmask,.-shufmask +CRYPTO_ASSEMBLY_OBJECT_END(shufmask) /* * SHA-256 constants - see FIPS 180-4 section 4.2.2. */ .align 64 -.type K256,@object -K256: +CRYPTO_ASSEMBLY_OBJECT_START(K256): .long 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5 .long 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5 .long 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3 @@ -204,4 +200,4 @@ K256: .long 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3 .long 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208 .long 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -.size K256,.-K256 +CRYPTO_ASSEMBLY_OBJECT_END(K256) diff --git a/src/lib/libcrypto/sha/sha512_aarch64_ce.S b/src/lib/libcrypto/sha/sha512_aarch64_ce.S index af59706258..77bd44593d 100644 --- a/src/lib/libcrypto/sha/sha512_aarch64_ce.S +++ b/src/lib/libcrypto/sha/sha512_aarch64_ce.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sha512_aarch64_ce.S,v 1.7 2026/05/07 15:41:37 jsing Exp $ */ +/* $OpenBSD: sha512_aarch64_ce.S,v 1.8 2026/05/07 15:50:47 jsing Exp $ */ /* * Copyright (c) 2023,2025 Joel Sing * @@ -171,8 +171,7 @@ * * Standard ARM ABI: x0 = ctx, x1 = in, x2 = num */ -.globl sha512_block_ce -sha512_block_ce: +CRYPTO_ASSEMBLY_GLOBAL_FUNCTION(sha512_block_ce): /* Save low 64 bits of v8 through v15 to the stack. */ sub sp, sp, #32 @@ -301,8 +300,7 @@ sha512_block_ce: * SHA-512 constants - see FIPS 180-4 section 4.2.3. */ .align 4 -.type K512,@object -K512: +CRYPTO_ASSEMBLY_OBJECT_START(K512): .quad 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc .quad 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118 .quad 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2 @@ -323,4 +321,4 @@ K512: .quad 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b .quad 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c .quad 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817 -.size K512,.-K512 +CRYPTO_ASSEMBLY_OBJECT_END(K512) diff --git a/src/lib/libcrypto/sha/sha512_amd64_generic.S b/src/lib/libcrypto/sha/sha512_amd64_generic.S index d4b6ebc0ff..61028c0a0b 100644 --- a/src/lib/libcrypto/sha/sha512_amd64_generic.S +++ b/src/lib/libcrypto/sha/sha512_amd64_generic.S @@ -1,4 +1,4 @@ -/* $OpenBSD: sha512_amd64_generic.S,v 1.6 2026/05/07 15:40:33 jsing Exp $ */ +/* $OpenBSD: sha512_amd64_generic.S,v 1.7 2026/05/07 15:50:47 jsing Exp $ */ /* * Copyright (c) 2024 Joel Sing * @@ -150,9 +150,7 @@ * Standard x86-64 ABI: rdi = ctx, rsi = in, rdx = num */ .align 16 -.globl sha512_block_generic -.type sha512_block_generic,@function -sha512_block_generic: +CRYPTO_ASSEMBLY_GLOBAL_FUNCTION(sha512_block_generic): _CET_ENDBR /* Save callee save registers. */ @@ -281,8 +279,7 @@ sha512_block_generic: * SHA-512 constants - see FIPS 180-4 section 4.2.3. */ .align 64 -.type K512,@object -K512: +CRYPTO_ASSEMBLY_OBJECT_START(K512): .quad 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc .quad 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118 .quad 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2 @@ -303,4 +300,4 @@ K512: .quad 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b .quad 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c .quad 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817 -.size K512,.-K512 +CRYPTO_ASSEMBLY_OBJECT_END(K512) -- cgit v1.2.3-55-g6feb