1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 01:48:00 +00:00
putty-source/windows
Simon Tatham c1a2114b28 Implement AES-GCM using the @openssh.com protocol IDs.
I only recently found out that OpenSSH defined their own protocol IDs
for AES-GCM, defined to work the same as the standard ones except that
they fixed the semantics for how you select the linked cipher+MAC pair
during key exchange.

(RFC 5647 defines protocol ids for AES-GCM in both the cipher and MAC
namespaces, and requires that you MUST select both or neither - but
this contradicts the selection policy set out in the base SSH RFCs,
and there's no discussion of how you resolve a conflict between them!
OpenSSH's answer is to do it the same way ChaCha20-Poly1305 works,
because that will ensure the two suites don't fight.)

People do occasionally ask us for this linked cipher/MAC pair, and now
I know it's actually feasible, I've implemented it, including a pair
of vector implementations for x86 and Arm using their respective
architecture extensions for multiplying polynomials over GF(2).

Unlike ChaCha20-Poly1305, I've kept the cipher and MAC implementations
in separate objects, with an arm's-length link between them that the
MAC uses when it needs to encrypt single cipher blocks to use as the
inputs to the MAC algorithm. That enables the cipher and the MAC to be
independently selected from their hardware-accelerated versions, just
in case someone runs on a system that has polynomial multiplication
instructions but not AES acceleration, or vice versa.

There's a fourth implementation of the GCM MAC, which is a pure
software implementation of the same algorithm used in the vectorised
versions. It's too slow to use live, but I've kept it in the code for
future testing needs, and because it's a convenient place to dump my
design comments.

The vectorised implementations are fairly crude as far as optimisation
goes. I'm sure serious x86 _or_ Arm optimisation engineers would look
at them and laugh. But GCM is a fast MAC compared to HMAC-SHA-256
(indeed compared to HMAC-anything-at-all), so it should at least be
good enough to use. And we've got a working version with some tests
now, so if someone else wants to improve them, they can.
2022-08-16 20:33:58 +01:00
..
utils Implement AES-GCM using the @openssh.com protocol IDs. 2022-08-16 20:33:58 +01:00
agent-client.c Formatting: standardise on "func(\n", not "func\n(". 2022-08-03 20:48:46 +01:00
cliloop.c Reorganise Windows HANDLE management. 2021-05-24 15:27:38 +01:00
CMakeLists.txt Move host CA config box out into its own source file. 2022-05-01 10:16:19 +01:00
config.c Macro wrapper on ctrl_radiobuttons to fill in the NULL. 2022-06-01 11:14:21 +01:00
conpty.c pterm.exe: load the ConPTY API at run time. 2022-05-21 09:53:03 +01:00
console.c Centralise most details of host-key prompting. 2022-07-07 18:05:32 +01:00
controls.c Formatting: realign run-on parenthesised stuff. 2022-08-03 20:48:46 +01:00
cryptoapi.h Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
dialog.c Remove redundant setup of host key prompt help contexts. 2022-08-07 18:36:44 +01:00
gss.c Formatting: realign run-on parenthesised stuff. 2022-08-03 20:48:46 +01:00
handle-io.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
handle-socket.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
handle-wait.c Fix an unused variable. 2021-05-27 09:48:32 +01:00
help.c windows/storage.c: factor out low-level Registry access. 2022-04-24 08:38:27 +01:00
help.h Documentation for OpenSSH certificates. 2022-08-07 18:44:11 +01:00
help.rc2 Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
installer.wxs Configurable CHM path in installer source. 2021-05-03 17:01:55 +01:00
jump-list.c Formatting: miscellaneous. 2022-08-03 20:48:46 +01:00
local-proxy.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
make_install_images.sh Remove white dialog background in MSI user interface. 2020-06-21 16:39:47 +01:00
msifixup.py Remove white dialog background in MSI user interface. 2020-06-21 16:39:47 +01:00
named-pipe-client.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
named-pipe-server.c Formatting: standardise on "func(\n", not "func\n(". 2022-08-03 20:48:46 +01:00
network.c Formatting: remove spurious spaces in 'type * var'. 2022-08-03 20:48:46 +01:00
no-jump-list.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
nohelp.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
noise.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
pageant-rc.h winpgnt: say 'click to focus' in async passphrase prompt. 2021-04-22 20:00:46 +01:00
pageant.c Certificate-aware handling of key fingerprints. 2022-08-05 18:08:59 +01:00
pageant.ico
pageant.mft Whitespace rationalisation of entire code base. 2019-09-08 20:29:21 +01:00
pageant.rc Certificate-aware handling of key fingerprints. 2022-08-05 18:08:59 +01:00
pageants.ico
platform.h Windows PuTTYgen: also display certificate info. 2022-07-30 17:16:55 +01:00
plink.c Centralise most details of host-key prompting. 2022-07-07 18:05:32 +01:00
plink.rc
printing.c Formatting: realign labels and case/default statements. 2022-08-03 20:48:46 +01:00
pscp.ico
pscp.rc
psftp.rc
psocks.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
pterm.c pterm.exe: run command-line options through cmdline.c. 2022-05-21 10:34:17 +01:00
pterm.ico Make Windows versions of the pterm icons. 2021-05-08 17:33:25 +01:00
pterm.rc New application: a Windows version of 'pterm'! 2021-05-08 17:51:27 +01:00
ptermcfg.ico Make Windows versions of the pterm icons. 2021-05-08 17:33:25 +01:00
putty-common.rc2 Centralise most details of host-key prompting. 2022-07-07 18:05:32 +01:00
putty-rc.h Centralise most details of host-key prompting. 2022-07-07 18:05:32 +01:00
putty.c Merge assorted pterm fixes from 'pre-0.77'. 2022-05-21 10:59:31 +01:00
putty.ico
putty.mft Windows 10: add per monitor DPI awareness support. 2021-04-02 19:04:19 +01:00
putty.rc Move icon declarations out of putty-common.rc2. 2021-05-08 17:33:25 +01:00
puttycfg.ico
puttygen-rc.h PuTTYgen: option to control Argon2 flavour. 2021-02-23 18:26:50 +00:00
puttygen.c Formatting: standardise on "func(\n", not "func\n(". 2022-08-03 20:48:46 +01:00
puttygen.ico
puttygen.mft Whitespace rationalisation of entire code base. 2019-09-08 20:29:21 +01:00
puttygen.rc Windows PuTTYgen: also display certificate info. 2022-07-30 17:16:55 +01:00
puttyins.ico
puttytel.mft Windows 10: add per monitor DPI awareness support. 2021-04-02 19:04:19 +01:00
puttytel.rc Move icon declarations out of putty-common.rc2. 2021-05-08 17:33:25 +01:00
rcstuff.h Replace mkfiles.pl with a CMake build system. 2021-04-17 13:53:02 +01:00
README-msi.txt Remove note about .CHM on network drives. 2019-03-18 21:53:45 +00:00
security-api.h Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
select-cli.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
select-gui.c Handle WM_NETEVENT in Windows Pageant. 2022-02-04 19:32:47 +00:00
serial.c Add memsets after allocation of all Backend implementors. 2021-10-30 17:28:28 +01:00
sftp.c Formatting: realign labels and case/default statements. 2022-08-03 20:48:46 +01:00
sharing.c Windows: factor out mutex lock/unlock from sharing.c. 2022-01-03 12:12:05 +00:00
sizetip.c Formatting change to braces around one case of a switch. 2020-02-16 11:26:21 +00:00
storage.c Formatting: standardise on "func(\n", not "func\n(". 2022-08-03 20:48:46 +01:00
test_screenshot.c Standalone screenshot utility. 2022-04-02 17:26:24 +01:00
unicode.c Formatting: miscellaneous. 2022-08-03 20:48:46 +01:00
version.rc2 FIXME about Windows resource CHMfulness hint. 2019-03-18 22:02:13 +00:00
website.url Switch chiark URLs to https. 2017-05-07 16:29:01 +01:00
win-gui-seat.h Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
window.c Formatting: miscellaneous. 2022-08-03 20:48:46 +01:00
x11.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00