OPENSSL_PPCCAP(3ossl)
π OPENSSL_PPCCAP π
okay bestie so this is the OPENSSL_ppccap(3ossl) page, and it's literally all about the PowerPC processor capabilities vector. yes that's a mouthful, no i will not apologise. grab a snack π
β¨ NAME β¨
OPENSSL_ppccap β the PowerPC processor capabilities vector. that's it, that's the name, it's giving "i contain multitudes (of bits)" π
π SYNOPSIS π
env OPENSSL_ppccap=... <application>
π¦ DESCRIPTION π¦
so here's the tea β: libcrypto supports PowerPC instruction set extensions, and those extensions get represented by bits in the PowerPC capabilities vector. when libcrypto initializes, it takes whatever the PowerPC CPU capabilities detection logic returned and stores those results in the vector. the detection methods are OS-dependent, and they use a mix of stuff the kernel gathered during boot plus probe functions that literally try to execute instructions and catch illegal instruction signals with a signal handler. main character energy honestly π
now, if you wanna override the set of extensions available to an application, you set the OPENSSL_ppccap environment variable before you start the application. you assign it a numerical value that denotes the bits in the PowerPC capabilities vector. and the ppc_arch.h header file says β and i quote β that "Flags' usage can appear ambiguous, because they are set rather to reflect OpenSSL performance preferences than actual processor capabilities." so like, the flags are vibes-based, not spec-based. noted. π
you enable multiple extensions by logically OR-ing the values that represent the extensions you want. simple as.
Notes: enabling an extension on a CPU that does NOT support that extension will result in aSIGILLcrash. fr fr, do not do this. on AIX, all vector instructions can be disabled with theschedo -ro allow_vmx=0command. DO NOT USE THIS COMMAND to disable vector instructions in the OS when it is running on a CPU level that supports the instructions, without ALSO disabling them inlibcrptovia theOPENSSL_ppccapenvironment variable β otherwise the application will crash with aSIGILL. π
currently, the following extensions are defined:
0x01- Name:
PPC_FPU64 - this flag is obsolete. that's it. that's all it does. retiring queen π
- Name:
0x02- Name:
PPC_ALTIVEC - Meaning: use AltiVec (aka VMX) instructions. in some but not all cases, this capability gates the use of later ISA vector instructions. the associated probe instruction is
vor(vector logical or). - Effect: enables use of vector instructions, but does not enable extensions added at specific ISA levels. however β and this is the sneaky part β disabling this capability disables a subset of vector extensions added at specific ISA levels even if they are otherwise enabled. it's giving "you can't sit with us" π«Ά
- Name:
0x04- Name:
PPC_CRYPTO207 - Meaning: use instructions added in ISA level 2.07. the associated probe instruction is
vcipher(vector AES cipher round). - Effect: enables AES, SHA-2 sigma, and other ISA 2.07 instructions for AES, SHA-2, GHASH, and Poly1305. iconic behavior β¨
- Name:
0x08- Name:
PPC_FPU - Meaning: use FPU instructions. the associated probe instruction is
fmr(floating move register). - Effect: enables the Poly1305 FPU implementation. the
PPC_CRYPTO207capability overrides this effect. so PPC_CRYPTO207 is the one calling the shots here, okurrr π
- Name:
0x10- Name:
PPC_MADD300 - Meaning: use instructions added in ISA level 3.00. the associated probe instruction is
maddhdu(multiply-add high doubleword unsigned). - Effect: enables use of the polynomial multiply and other ISA 3.00 instructions for AES-GCM, P-384, and P-521. slay π₯
- Name:
0x20- Name:
PPC_MFTB - Meaning: use the
mftb(move from time base) instruction. the associated probe instruction ismftb. - Effect: enables use of the
mftbinstruction to sample the lower 32 bits of the CPU time base register in order to acquire entropy. considered obsolete. thePPC_MFSPR268capability overrides this capability. so if you're picking, pick the newer one bestie π
- Name:
0x40- Name:
PPC_MFSPR268 - Meaning: use the
mfspr(move from special purpose register) instruction to read SPR 268. the associated probe instruction ismfspr 268. - Effect: enables use of the
mfsprinstruction to sample the lower 32 bits of the CPU time base register from SPR 268, theTBL(time base lower) register, in order to acquire entropy. this is the upgrade, the glow-up, the sequel that ate π
- Name:
0x80- Name:
PPC_BRD31 - Meaning: use instructions added in ISA level 3.1. the associated probe instruction is
brd(byte-reverse doubleword). - Effect: enables use of ISA 3.1 instructions in ChaCha20. periodt π
- Name:
πΈ RETURN VALUES πΈ
not available. yeah. nothing. it's an env var situation, there's no return value to speak of. not me expecting a return value π
β EXAMPLES β
check the currently detected capabilities:
$ openssl info -cpusettings
OPENSSL_ppccap=0x2E
the detected capabilities in the above example indicate that PPC_MFTB, PPC_FPU, PPC_CRYPTO207, PPC_MFSPR268, and PPC_ALTIVEC are enabled. look at her go π
disable all instruction set extensions:
OPENSSL_ppccap=0x00
enable base AltiVec extensions:
OPENSSL_ppccap=0x02
π COPYRIGHT π
Copyright 2025-2026 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.
and that's the whole page bestie, no cap π§ this was version 3.5.9, dated 2026-09-29, and it's the OPENSSL_PPCCAP(3ossl) manual page β go forth and set your capability bits responsibly, and remember: never SIGILL yourself on purpose. bye pookie πβ¨
π¦ where this page comes from
- fedora 43: openssl-devel 1:3.5.9-1.fc43 Β· Apache-2.0
- fedora 43: openssl-devel 1:3.5.9-1.fc43 Β· Apache-2.0
- fedora 44: openssl-devel 1:3.5.9-1.fc44 Β· Apache-2.0
- fedora 44: openssl-devel 1:3.5.9-1.fc44 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms