Go to the documentation of this file.
35 #include "ssh_config.h"
72 #ifndef GPL_LICENSE_TERMS_ACCEPTED
73 #error Before compiling CycloneSSH Open, you must accept the terms of the GPL license
77 #define CYCLONE_SSH_VERSION_STRING "2.6.6"
79 #define CYCLONE_SSH_MAJOR_VERSION 2
81 #define CYCLONE_SSH_MINOR_VERSION 6
83 #define CYCLONE_SSH_REV_NUMBER 6
86 #define CYCLONE_SSH_ID "SSH-2.0-CycloneSSH_" CYCLONE_SSH_VERSION_STRING
90 #define SSH_SUPPORT ENABLED
91 #elif (SSH_SUPPORT != ENABLED && SSH_SUPPORT != DISABLED)
92 #error SSH_SUPPORT parameter is not valid
96 #ifndef SSH_CLIENT_SUPPORT
97 #define SSH_CLIENT_SUPPORT ENABLED
98 #elif (SSH_CLIENT_SUPPORT != ENABLED && SSH_CLIENT_SUPPORT != DISABLED)
99 #error SSH_CLIENT_SUPPORT parameter is not valid
103 #ifndef SSH_SERVER_SUPPORT
104 #define SSH_SERVER_SUPPORT ENABLED
105 #elif (SSH_SERVER_SUPPORT != ENABLED && SSH_SERVER_SUPPORT != DISABLED)
106 #error SSH_SERVER_SUPPORT parameter is not valid
110 #ifndef SSH_PUBLIC_KEY_AUTH_SUPPORT
111 #define SSH_PUBLIC_KEY_AUTH_SUPPORT ENABLED
112 #elif (SSH_PUBLIC_KEY_AUTH_SUPPORT != ENABLED && SSH_PUBLIC_KEY_AUTH_SUPPORT != DISABLED)
113 #error SSH_PUBLIC_KEY_AUTH_SUPPORT parameter is not valid
117 #ifndef SSH_PASSWORD_AUTH_SUPPORT
118 #define SSH_PASSWORD_AUTH_SUPPORT ENABLED
119 #elif (SSH_PASSWORD_AUTH_SUPPORT != ENABLED && SSH_PASSWORD_AUTH_SUPPORT != DISABLED)
120 #error SSH_PASSWORD_AUTH_SUPPORT parameter is not valid
124 #ifndef SSH_ENCRYPTED_KEY_SUPPORT
125 #define SSH_ENCRYPTED_KEY_SUPPORT DISABLED
126 #elif (SSH_ENCRYPTED_KEY_SUPPORT != ENABLED && SSH_ENCRYPTED_KEY_SUPPORT != DISABLED)
127 #error SSH_ENCRYPTED_KEY_SUPPORT parameter is not valid
131 #ifndef SSH_CERT_SUPPORT
132 #define SSH_CERT_SUPPORT DISABLED
133 #elif (SSH_CERT_SUPPORT != ENABLED && SSH_CERT_SUPPORT != DISABLED)
134 #error SSH_CERT_SUPPORT parameter is not valid
138 #ifndef SSH_EXT_INFO_SUPPORT
139 #define SSH_EXT_INFO_SUPPORT ENABLED
140 #elif (SSH_EXT_INFO_SUPPORT != ENABLED && SSH_EXT_INFO_SUPPORT != DISABLED)
141 #error SSH_EXT_INFO_SUPPORT parameter is not valid
145 #ifndef SSH_SERVER_SIG_ALGS_EXT_SUPPORT
146 #define SSH_SERVER_SIG_ALGS_EXT_SUPPORT ENABLED
147 #elif (SSH_SERVER_SIG_ALGS_EXT_SUPPORT != ENABLED && SSH_SERVER_SIG_ALGS_EXT_SUPPORT != DISABLED)
148 #error SSH_SERVER_SIG_ALGS_EXT_SUPPORT parameter is not valid
152 #ifndef SSH_GLOBAL_REQ_OK_EXT_SUPPORT
153 #define SSH_GLOBAL_REQ_OK_EXT_SUPPORT DISABLED
154 #elif (SSH_GLOBAL_REQ_OK_EXT_SUPPORT != ENABLED && SSH_GLOBAL_REQ_OK_EXT_SUPPORT != DISABLED)
155 #error SSH_GLOBAL_REQ_OK_EXT_SUPPORT parameter is not valid
159 #ifndef SSH_KEX_STRICT_SUPPORT
160 #define SSH_KEX_STRICT_SUPPORT ENABLED
161 #elif (SSH_KEX_STRICT_SUPPORT != ENABLED && SSH_KEX_STRICT_SUPPORT != DISABLED)
162 #error SSH_KEX_STRICT_SUPPORT parameter is not valid
166 #ifndef SSH_SIGN_CALLBACK_SUPPORT
167 #define SSH_SIGN_CALLBACK_SUPPORT DISABLED
168 #elif (SSH_SIGN_CALLBACK_SUPPORT != ENABLED && SSH_SIGN_CALLBACK_SUPPORT != DISABLED)
169 #error SSH_SIGN_CALLBACK_SUPPORT parameter is not valid
173 #ifndef SSH_ECDH_CALLBACK_SUPPORT
174 #define SSH_ECDH_CALLBACK_SUPPORT DISABLED
175 #elif (SSH_ECDH_CALLBACK_SUPPORT != ENABLED && SSH_ECDH_CALLBACK_SUPPORT != DISABLED)
176 #error SSH_ECDH_CALLBACK_SUPPORT parameter is not valid
180 #ifndef SSH_MAX_HOST_KEYS
181 #define SSH_MAX_HOST_KEYS 3
182 #elif (SSH_MAX_HOST_KEYS < 1)
183 #error SSH_MAX_HOST_KEYS parameter is not valid
187 #ifndef SSH_MAX_CONNECTIONS
188 #define SSH_MAX_CONNECTIONS 10
189 #elif (SSH_MAX_CONNECTIONS < 1)
190 #error SSH_MAX_CONNECTIONS parameter is not valid
194 #ifndef SSH_MAX_GLOBAL_REQ_CALLBACKS
195 #define SSH_MAX_GLOBAL_REQ_CALLBACKS 3
196 #elif (SSH_MAX_GLOBAL_REQ_CALLBACKS < 1)
197 #error SSH_MAX_GLOBAL_REQ_CALLBACKS parameter is not valid
201 #ifndef SSH_MAX_CHANNEL_REQ_CALLBACKS
202 #define SSH_MAX_CHANNEL_REQ_CALLBACKS 3
203 #elif (SSH_MAX_CHANNEL_REQ_CALLBACKS < 1)
204 #error SSH_MAX_CHANNEL_REQ_CALLBACKS parameter is not valid
208 #ifndef SSH_MAX_CHANNEL_OPEN_CALLBACKS
209 #define SSH_MAX_CHANNEL_OPEN_CALLBACKS 1
210 #elif (SSH_MAX_CHANNEL_OPEN_CALLBACKS < 1)
211 #error SSH_MAX_CHANNEL_OPEN_CALLBACKS parameter is not valid
215 #ifndef SSH_MAX_CONN_OPEN_CALLBACKS
216 #define SSH_MAX_CONN_OPEN_CALLBACKS 1
217 #elif (SSH_MAX_CONN_OPEN_CALLBACKS < 1)
218 #error SSH_MAX_CONN_OPEN_CALLBACKS parameter is not valid
222 #ifndef SSH_MAX_CONN_CLOSE_CALLBACKS
223 #define SSH_MAX_CONN_CLOSE_CALLBACKS 1
224 #elif (SSH_MAX_CONN_CLOSE_CALLBACKS < 1)
225 #error SSH_MAX_CONN_CLOSE_CALLBACKS parameter is not valid
229 #ifndef SSH_MAX_AUTH_ATTEMPTS
230 #define SSH_MAX_AUTH_ATTEMPTS 10
231 #elif (SSH_MAX_AUTH_ATTEMPTS < 1 && SSH_MAX_AUTH_ATTEMPTS > 20)
232 #error SSH_MAX_AUTH_ATTEMPTS parameter is not valid
236 #ifndef SSH_MAX_PACKET_SIZE
237 #define SSH_MAX_PACKET_SIZE 2048
238 #elif (SSH_MAX_PACKET_SIZE < 128)
239 #error SSH_MAX_PACKET_SIZE parameter is not valid
243 #ifndef SSH_CHANNEL_BUFFER_SIZE
244 #define SSH_CHANNEL_BUFFER_SIZE 2048
245 #elif (SSH_CHANNEL_BUFFER_SIZE < 128)
246 #error SSH_CHANNEL_BUFFER_SIZE parameter is not valid
250 #ifndef SSH_MAX_ID_LEN
251 #define SSH_MAX_ID_LEN 80
252 #elif (SSH_MAX_ID_LEN < 1)
253 #error SSH_MAX_ID_LEN parameter is not valid
257 #ifndef SSH_MAX_USERNAME_LEN
258 #define SSH_MAX_USERNAME_LEN 32
259 #elif (SSH_MAX_USERNAME_LEN < 0)
260 #error SSH_MAX_USERNAME_LEN parameter is not valid
264 #ifndef SSH_MAX_PASSWORD_LEN
265 #define SSH_MAX_PASSWORD_LEN 32
266 #elif (SSH_MAX_PASSWORD_LEN < 0)
267 #error SSH_MAX_PASSWORD_LEN parameter is not valid
271 #ifndef SSH_MAX_PASSWORD_CHANGE_PROMPT_LEN
272 #define SSH_MAX_PASSWORD_CHANGE_PROMPT_LEN 0
273 #elif (SSH_MAX_PASSWORD_CHANGE_PROMPT_LEN < 0)
274 #error SSH_MAX_PASSWORD_CHANGE_PROMPT_LEN parameter is not valid
278 #ifndef SSH_ETM_SUPPORT
279 #define SSH_ETM_SUPPORT DISABLED
280 #elif (SSH_ETM_SUPPORT != ENABLED && SSH_ETM_SUPPORT != DISABLED)
281 #error SSH_ETM_SUPPORT parameter is not valid
285 #ifndef SSH_STREAM_CIPHER_SUPPORT
286 #define SSH_STREAM_CIPHER_SUPPORT DISABLED
287 #elif (SSH_STREAM_CIPHER_SUPPORT != ENABLED && SSH_STREAM_CIPHER_SUPPORT != DISABLED)
288 #error SSH_STREAM_CIPHER_SUPPORT parameter is not valid
292 #ifndef SSH_CBC_CIPHER_SUPPORT
293 #define SSH_CBC_CIPHER_SUPPORT DISABLED
294 #elif (SSH_CBC_CIPHER_SUPPORT != ENABLED && SSH_CBC_CIPHER_SUPPORT != DISABLED)
295 #error SSH_CBC_CIPHER_SUPPORT parameter is not valid
299 #ifndef SSH_CTR_CIPHER_SUPPORT
300 #define SSH_CTR_CIPHER_SUPPORT ENABLED
301 #elif (SSH_CTR_CIPHER_SUPPORT != ENABLED && SSH_CTR_CIPHER_SUPPORT != DISABLED)
302 #error SSH_CTR_CIPHER_SUPPORT parameter is not valid
306 #ifndef SSH_GCM_CIPHER_SUPPORT
307 #define SSH_GCM_CIPHER_SUPPORT ENABLED
308 #elif (SSH_GCM_CIPHER_SUPPORT != ENABLED && SSH_GCM_CIPHER_SUPPORT != DISABLED)
309 #error SSH_GCM_CIPHER_SUPPORT parameter is not valid
313 #ifndef SSH_RFC5647_SUPPORT
314 #define SSH_RFC5647_SUPPORT DISABLED
315 #elif (SSH_RFC5647_SUPPORT != ENABLED && SSH_RFC5647_SUPPORT != DISABLED)
316 #error SSH_RFC5647_SUPPORT parameter is not valid
320 #ifndef SSH_CHACHA20_POLY1305_SUPPORT
321 #define SSH_CHACHA20_POLY1305_SUPPORT DISABLED
322 #elif (SSH_CHACHA20_POLY1305_SUPPORT != ENABLED && SSH_CHACHA20_POLY1305_SUPPORT != DISABLED)
323 #error SSH_CHACHA20_POLY1305_SUPPORT parameter is not valid
327 #ifndef SSH_RC4_SUPPORT
328 #define SSH_RC4_SUPPORT DISABLED
329 #elif (SSH_RC4_SUPPORT != ENABLED && SSH_RC4_SUPPORT != DISABLED)
330 #error SSH_RC4_SUPPORT parameter is not valid
334 #ifndef SSH_RC4_128_SUPPORT
335 #define SSH_RC4_128_SUPPORT DISABLED
336 #elif (SSH_RC4_128_SUPPORT != ENABLED && SSH_RC4_128_SUPPORT != DISABLED)
337 #error SSH_RC4_128_SUPPORT parameter is not valid
341 #ifndef SSH_RC4_256_SUPPORT
342 #define SSH_RC4_256_SUPPORT DISABLED
343 #elif (SSH_RC4_256_SUPPORT != ENABLED && SSH_RC4_256_SUPPORT != DISABLED)
344 #error SSH_RC4_256_SUPPORT parameter is not valid
348 #ifndef SSH_CAST128_SUPPORT
349 #define SSH_CAST128_SUPPORT DISABLED
350 #elif (SSH_CAST128_SUPPORT != ENABLED && SSH_CAST128_SUPPORT != DISABLED)
351 #error SSH_CAST128_SUPPORT parameter is not valid
355 #ifndef SSH_IDEA_SUPPORT
356 #define SSH_IDEA_SUPPORT DISABLED
357 #elif (SSH_IDEA_SUPPORT != ENABLED && SSH_IDEA_SUPPORT != DISABLED)
358 #error SSH_IDEA_SUPPORT parameter is not valid
362 #ifndef SSH_BLOWFISH_SUPPORT
363 #define SSH_BLOWFISH_SUPPORT DISABLED
364 #elif (SSH_BLOWFISH_SUPPORT != ENABLED && SSH_BLOWFISH_SUPPORT != DISABLED)
365 #error SSH_BLOWFISH_SUPPORT parameter is not valid
369 #ifndef SSH_3DES_SUPPORT
370 #define SSH_3DES_SUPPORT DISABLED
371 #elif (SSH_3DES_SUPPORT != ENABLED && SSH_3DES_SUPPORT != DISABLED)
372 #error SSH_3DES_SUPPORT parameter is not valid
376 #ifndef SSH_AES_128_SUPPORT
377 #define SSH_AES_128_SUPPORT ENABLED
378 #elif (SSH_AES_128_SUPPORT != ENABLED && SSH_AES_128_SUPPORT != DISABLED)
379 #error SSH_AES_128_SUPPORT parameter is not valid
383 #ifndef SSH_AES_192_SUPPORT
384 #define SSH_AES_192_SUPPORT ENABLED
385 #elif (SSH_AES_192_SUPPORT != ENABLED && SSH_AES_192_SUPPORT != DISABLED)
386 #error SSH_AES_192_SUPPORT parameter is not valid
390 #ifndef SSH_AES_256_SUPPORT
391 #define SSH_AES_256_SUPPORT ENABLED
392 #elif (SSH_AES_256_SUPPORT != ENABLED && SSH_AES_256_SUPPORT != DISABLED)
393 #error SSH_AES_256_SUPPORT parameter is not valid
397 #ifndef SSH_TWOFISH_128_SUPPORT
398 #define SSH_TWOFISH_128_SUPPORT DISABLED
399 #elif (SSH_TWOFISH_128_SUPPORT != ENABLED && SSH_TWOFISH_128_SUPPORT != DISABLED)
400 #error SSH_TWOFISH_128_SUPPORT parameter is not valid
404 #ifndef SSH_TWOFISH_192_SUPPORT
405 #define SSH_TWOFISH_192_SUPPORT DISABLED
406 #elif (SSH_TWOFISH_192_SUPPORT != ENABLED && SSH_TWOFISH_192_SUPPORT != DISABLED)
407 #error SSH_TWOFISH_192_SUPPORT parameter is not valid
411 #ifndef SSH_TWOFISH_256_SUPPORT
412 #define SSH_TWOFISH_256_SUPPORT DISABLED
413 #elif (SSH_TWOFISH_256_SUPPORT != ENABLED && SSH_TWOFISH_256_SUPPORT != DISABLED)
414 #error SSH_TWOFISH_256_SUPPORT parameter is not valid
418 #ifndef SSH_SERPENT_128_SUPPORT
419 #define SSH_SERPENT_128_SUPPORT DISABLED
420 #elif (SSH_SERPENT_128_SUPPORT != ENABLED && SSH_SERPENT_128_SUPPORT != DISABLED)
421 #error SSH_SERPENT_128_SUPPORT parameter is not valid
425 #ifndef SSH_SERPENT_192_SUPPORT
426 #define SSH_SERPENT_192_SUPPORT DISABLED
427 #elif (SSH_SERPENT_192_SUPPORT != ENABLED && SSH_SERPENT_192_SUPPORT != DISABLED)
428 #error SSH_SERPENT_192_SUPPORT parameter is not valid
432 #ifndef SSH_SERPENT_256_SUPPORT
433 #define SSH_SERPENT_256_SUPPORT DISABLED
434 #elif (SSH_SERPENT_256_SUPPORT != ENABLED && SSH_SERPENT_256_SUPPORT != DISABLED)
435 #error SSH_SERPENT_256_SUPPORT parameter is not valid
439 #ifndef SSH_CAMELLIA_128_SUPPORT
440 #define SSH_CAMELLIA_128_SUPPORT DISABLED
441 #elif (SSH_CAMELLIA_128_SUPPORT != ENABLED && SSH_CAMELLIA_128_SUPPORT != DISABLED)
442 #error SSH_CAMELLIA_128_SUPPORT parameter is not valid
446 #ifndef SSH_CAMELLIA_192_SUPPORT
447 #define SSH_CAMELLIA_192_SUPPORT DISABLED
448 #elif (SSH_CAMELLIA_192_SUPPORT != ENABLED && SSH_CAMELLIA_192_SUPPORT != DISABLED)
449 #error SSH_CAMELLIA_192_SUPPORT parameter is not valid
453 #ifndef SSH_CAMELLIA_256_SUPPORT
454 #define SSH_CAMELLIA_256_SUPPORT DISABLED
455 #elif (SSH_CAMELLIA_256_SUPPORT != ENABLED && SSH_CAMELLIA_256_SUPPORT != DISABLED)
456 #error SSH_CAMELLIA_256_SUPPORT parameter is not valid
460 #ifndef SSH_SEED_SUPPORT
461 #define SSH_SEED_SUPPORT DISABLED
462 #elif (SSH_SEED_SUPPORT != ENABLED && SSH_SEED_SUPPORT != DISABLED)
463 #error SSH_SEED_SUPPORT parameter is not valid
467 #ifndef SSH_MD5_SUPPORT
468 #define SSH_MD5_SUPPORT DISABLED
469 #elif (SSH_MD5_SUPPORT != ENABLED && SSH_MD5_SUPPORT != DISABLED)
470 #error SSH_MD5_SUPPORT parameter is not valid
474 #ifndef SSH_MD5_96_SUPPORT
475 #define SSH_MD5_96_SUPPORT DISABLED
476 #elif (SSH_MD5_96_SUPPORT != ENABLED && SSH_MD5_96_SUPPORT != DISABLED)
477 #error SSH_MD5_96_SUPPORT parameter is not valid
481 #ifndef SSH_RIPEMD160_SUPPORT
482 #define SSH_RIPEMD160_SUPPORT DISABLED
483 #elif (SSH_RIPEMD160_SUPPORT != ENABLED && SSH_RIPEMD160_SUPPORT != DISABLED)
484 #error SSH_RIPEMD160_SUPPORT parameter is not valid
488 #ifndef SSH_SHA1_SUPPORT
489 #define SSH_SHA1_SUPPORT ENABLED
490 #elif (SSH_SHA1_SUPPORT != ENABLED && SSH_SHA1_SUPPORT != DISABLED)
491 #error SSH_SHA1_SUPPORT parameter is not valid
495 #ifndef SSH_SHA1_96_SUPPORT
496 #define SSH_SHA1_96_SUPPORT DISABLED
497 #elif (SSH_SHA1_96_SUPPORT != ENABLED && SSH_SHA1_96_SUPPORT != DISABLED)
498 #error SSH_SHA1_96_SUPPORT parameter is not valid
502 #ifndef SSH_SHA224_SUPPORT
503 #define SSH_SHA224_SUPPORT DISABLED
504 #elif (SSH_SHA224_SUPPORT != ENABLED && SSH_SHA224_SUPPORT != DISABLED)
505 #error SSH_SHA224_SUPPORT parameter is not valid
509 #ifndef SSH_SHA256_SUPPORT
510 #define SSH_SHA256_SUPPORT ENABLED
511 #elif (SSH_SHA256_SUPPORT != ENABLED && SSH_SHA256_SUPPORT != DISABLED)
512 #error SSH_SHA256_SUPPORT parameter is not valid
516 #ifndef SSH_SHA384_SUPPORT
517 #define SSH_SHA384_SUPPORT ENABLED
518 #elif (SSH_SHA384_SUPPORT != ENABLED && SSH_SHA384_SUPPORT != DISABLED)
519 #error SSH_SHA384_SUPPORT parameter is not valid
523 #ifndef SSH_SHA512_SUPPORT
524 #define SSH_SHA512_SUPPORT ENABLED
525 #elif (SSH_SHA512_SUPPORT != ENABLED && SSH_SHA512_SUPPORT != DISABLED)
526 #error SSH_SHA512_SUPPORT parameter is not valid
530 #ifndef SSH_RSA_KEX_SUPPORT
531 #define SSH_RSA_KEX_SUPPORT DISABLED
532 #elif (SSH_RSA_KEX_SUPPORT != ENABLED && SSH_RSA_KEX_SUPPORT != DISABLED)
533 #error SSH_RSA_KEX_SUPPORT parameter is not valid
537 #ifndef SSH_DH_KEX_SUPPORT
538 #define SSH_DH_KEX_SUPPORT ENABLED
539 #elif (SSH_DH_KEX_SUPPORT != ENABLED && SSH_DH_KEX_SUPPORT != DISABLED)
540 #error SSH_DH_KEX_SUPPORT parameter is not valid
544 #ifndef SSH_DH_GEX_KEX_SUPPORT
545 #define SSH_DH_GEX_KEX_SUPPORT DISABLED
546 #elif (SSH_DH_GEX_KEX_SUPPORT != ENABLED && SSH_DH_GEX_KEX_SUPPORT != DISABLED)
547 #error SSH_DH_GEX_KEX_SUPPORT parameter is not valid
551 #ifndef SSH_ECDH_KEX_SUPPORT
552 #define SSH_ECDH_KEX_SUPPORT ENABLED
553 #elif (SSH_ECDH_KEX_SUPPORT != ENABLED && SSH_ECDH_KEX_SUPPORT != DISABLED)
554 #error SSH_ECDH_KEX_SUPPORT parameter is not valid
558 #ifndef SSH_KEM_KEX_SUPPORT
559 #define SSH_KEM_KEX_SUPPORT DISABLED
560 #elif (SSH_KEM_KEX_SUPPORT != ENABLED && SSH_KEM_KEX_SUPPORT != DISABLED)
561 #error SSH_KEM_KEX_SUPPORT parameter is not valid
565 #ifndef SSH_HYBRID_KEX_SUPPORT
566 #define SSH_HYBRID_KEX_SUPPORT DISABLED
567 #elif (SSH_HYBRID_KEX_SUPPORT != ENABLED && SSH_HYBRID_KEX_SUPPORT != DISABLED)
568 #error SSH_HYBRID_KEX_SUPPORT parameter is not valid
572 #ifndef SSH_RSA_SIGN_SUPPORT
573 #define SSH_RSA_SIGN_SUPPORT ENABLED
574 #elif (SSH_RSA_SIGN_SUPPORT != ENABLED && SSH_RSA_SIGN_SUPPORT != DISABLED)
575 #error SSH_RSA_SIGN_SUPPORT parameter is not valid
579 #ifndef SSH_DSA_SIGN_SUPPORT
580 #define SSH_DSA_SIGN_SUPPORT ENABLED
581 #elif (SSH_DSA_SIGN_SUPPORT != ENABLED && SSH_DSA_SIGN_SUPPORT != DISABLED)
582 #error SSH_DSA_SIGN_SUPPORT parameter is not valid
586 #ifndef SSH_ECDSA_SIGN_SUPPORT
587 #define SSH_ECDSA_SIGN_SUPPORT ENABLED
588 #elif (SSH_ECDSA_SIGN_SUPPORT != ENABLED && SSH_ECDSA_SIGN_SUPPORT != DISABLED)
589 #error SSH_ECDSA_SIGN_SUPPORT parameter is not valid
593 #ifndef SSH_ED25519_SIGN_SUPPORT
594 #define SSH_ED25519_SIGN_SUPPORT ENABLED
595 #elif (SSH_ED25519_SIGN_SUPPORT != ENABLED && SSH_ED25519_SIGN_SUPPORT != DISABLED)
596 #error SSH_ED25519_SIGN_SUPPORT parameter is not valid
600 #ifndef SSH_ED448_SIGN_SUPPORT
601 #define SSH_ED448_SIGN_SUPPORT DISABLED
602 #elif (SSH_ED448_SIGN_SUPPORT != ENABLED && SSH_ED448_SIGN_SUPPORT != DISABLED)
603 #error SSH_ED448_SIGN_SUPPORT parameter is not valid
607 #ifndef SSH_MLDSA44_SIGN_SUPPORT
608 #define SSH_MLDSA44_SIGN_SUPPORT DISABLED
609 #elif (SSH_MLDSA44_SIGN_SUPPORT != ENABLED && SSH_MLDSA44_SIGN_SUPPORT != DISABLED)
610 #error SSH_MLDSA44_SIGN_SUPPORT parameter is not valid
614 #ifndef SSH_MLDSA65_SIGN_SUPPORT
615 #define SSH_MLDSA65_SIGN_SUPPORT DISABLED
616 #elif (SSH_MLDSA65_SIGN_SUPPORT != ENABLED && SSH_MLDSA65_SIGN_SUPPORT != DISABLED)
617 #error SSH_MLDSA65_SIGN_SUPPORT parameter is not valid
621 #ifndef SSH_MLDSA87_SIGN_SUPPORT
622 #define SSH_MLDSA87_SIGN_SUPPORT DISABLED
623 #elif (SSH_MLDSA87_SIGN_SUPPORT != ENABLED && SSH_MLDSA87_SIGN_SUPPORT != DISABLED)
624 #error SSH_MLDSA87_SIGN_SUPPORT parameter is not valid
628 #ifndef SSH_NISTP256_SUPPORT
629 #define SSH_NISTP256_SUPPORT ENABLED
630 #elif (SSH_NISTP256_SUPPORT != ENABLED && SSH_NISTP256_SUPPORT != DISABLED)
631 #error SSH_NISTP256_SUPPORT parameter is not valid
635 #ifndef SSH_NISTP384_SUPPORT
636 #define SSH_NISTP384_SUPPORT ENABLED
637 #elif (SSH_NISTP384_SUPPORT != ENABLED && SSH_NISTP384_SUPPORT != DISABLED)
638 #error SSH_NISTP384_SUPPORT parameter is not valid
642 #ifndef SSH_NISTP521_SUPPORT
643 #define SSH_NISTP521_SUPPORT ENABLED
644 #elif (SSH_NISTP521_SUPPORT != ENABLED && SSH_NISTP521_SUPPORT != DISABLED)
645 #error SSH_NISTP521_SUPPORT parameter is not valid
649 #ifndef SSH_CURVE25519_SUPPORT
650 #define SSH_CURVE25519_SUPPORT ENABLED
651 #elif (SSH_CURVE25519_SUPPORT != ENABLED && SSH_CURVE25519_SUPPORT != DISABLED)
652 #error SSH_CURVE25519_SUPPORT parameter is not valid
656 #ifndef SSH_CURVE448_SUPPORT
657 #define SSH_CURVE448_SUPPORT DISABLED
658 #elif (SSH_CURVE448_SUPPORT != ENABLED && SSH_CURVE448_SUPPORT != DISABLED)
659 #error SSH_CURVE448_SUPPORT parameter is not valid
663 #ifndef SSH_MLKEM768_SUPPORT
664 #define SSH_MLKEM768_SUPPORT DISABLED
665 #elif (SSH_MLKEM768_SUPPORT != ENABLED && SSH_MLKEM768_SUPPORT != DISABLED)
666 #error SSH_MLKEM768_SUPPORT parameter is not valid
670 #ifndef SSH_MLKEM1024_SUPPORT
671 #define SSH_MLKEM1024_SUPPORT DISABLED
672 #elif (SSH_MLKEM1024_SUPPORT != ENABLED && SSH_MLKEM1024_SUPPORT != DISABLED)
673 #error SSH_MLKEM1024_SUPPORT parameter is not valid
677 #ifndef SSH_SNTRUP761_SUPPORT
678 #define SSH_SNTRUP761_SUPPORT DISABLED
679 #elif (SSH_SNTRUP761_SUPPORT != ENABLED && SSH_SNTRUP761_SUPPORT != DISABLED)
680 #error SSH_SNTRUP761_SUPPORT parameter is not valid
684 #ifndef SSH_KEY_LOG_SUPPORT
685 #define SSH_KEY_LOG_SUPPORT DISABLED
686 #elif (SSH_KEY_LOG_SUPPORT != ENABLED && SSH_KEY_LOG_SUPPORT != DISABLED)
687 #error SSH_KEY_LOG_SUPPORT parameter is not valid
691 #ifndef SSH_MAX_RSA_KEYS
692 #define SSH_MAX_RSA_KEYS 2
693 #elif (SSH_MAX_RSA_KEYS < 1)
694 #error SSH_MAX_RSA_KEYS parameter is not valid
698 #ifndef SSH_MAX_DH_GEX_GROUPS
699 #define SSH_MAX_DH_GEX_GROUPS 2
700 #elif (SSH_MAX_DH_GEX_GROUPS < 1)
701 #error SSH_MAX_DH_GEX_GROUPS parameter is not valid
705 #ifndef SSH_MIN_DH_MODULUS_SIZE
706 #define SSH_MIN_DH_MODULUS_SIZE 1024
707 #elif (SSH_MIN_DH_MODULUS_SIZE < 1024)
708 #error SSH_MIN_DH_MODULUS_SIZE parameter is not valid
712 #ifndef SSH_PREFERRED_DH_MODULUS_SIZE
713 #define SSH_PREFERRED_DH_MODULUS_SIZE 2048
714 #elif (SSH_PREFERRED_DH_MODULUS_SIZE < SSH_MIN_DH_MODULUS_SIZE)
715 #error SSH_PREFERRED_DH_MODULUS_SIZE parameter is not valid
719 #ifndef SSH_MAX_DH_MODULUS_SIZE
720 #define SSH_MAX_DH_MODULUS_SIZE 3072
721 #elif (SSH_MAX_DH_MODULUS_SIZE < SSH_PREFERRED_DH_MODULUS_SIZE)
722 #error SSH_MAX_DH_MODULUS_SIZE parameter is not valid
726 #ifndef SSH_MIN_RSA_MODULUS_SIZE
727 #define SSH_MIN_RSA_MODULUS_SIZE 1024
728 #elif (SSH_MIN_RSA_MODULUS_SIZE < 1024)
729 #error SSH_MIN_RSA_MODULUS_SIZE parameter is not valid
733 #ifndef SSH_MAX_RSA_MODULUS_SIZE
734 #define SSH_MAX_RSA_MODULUS_SIZE 4096
735 #elif (SSH_MAX_RSA_MODULUS_SIZE < SSH_MIN_RSA_MODULUS_SIZE)
736 #error SSH_MAX_RSA_MODULUS_SIZE parameter is not valid
740 #ifndef SSH_MIN_DSA_MODULUS_SIZE
741 #define SSH_MIN_DSA_MODULUS_SIZE 1024
742 #elif (SSH_MIN_DSA_MODULUS_SIZE < 1024)
743 #error SSH_MIN_DSA_MODULUS_SIZE parameter is not valid
747 #ifndef SSH_MAX_DSA_MODULUS_SIZE
748 #define SSH_MAX_DSA_MODULUS_SIZE 4096
749 #elif (SSH_MAX_DSA_MODULUS_SIZE < SSH_MIN_DSA_MODULUS_SIZE)
750 #error SSH_MAX_DSA_MODULUS_SIZE parameter is not valid
755 #define sshAllocMem(size) osAllocMem(size)
760 #define sshFreeMem(p) osFreeMem(p)
764 #if (SSH_STREAM_CIPHER_SUPPORT == ENABLED)
765 #define SSH_HMAC_SUPPORT ENABLED
766 #elif (SSH_CBC_CIPHER_SUPPORT == ENABLED)
767 #define SSH_HMAC_SUPPORT ENABLED
768 #elif (SSH_CTR_CIPHER_SUPPORT == ENABLED)
769 #define SSH_HMAC_SUPPORT ENABLED
771 #define SSH_HMAC_SUPPORT DISABLED
775 #if (SSH_CHACHA20_POLY1305_SUPPORT == ENABLED)
776 #define SSH_MAX_ENC_KEY_SIZE 64
778 #define SSH_MAX_ENC_KEY_SIZE 32
782 #if (SSH_AES_128_SUPPORT == ENABLED)
783 #define SSH_MAX_CIPHER_BLOCK_SIZE AES_BLOCK_SIZE
784 #elif (SSH_AES_192_SUPPORT == ENABLED)
785 #define SSH_MAX_CIPHER_BLOCK_SIZE AES_BLOCK_SIZE
786 #elif (SSH_AES_256_SUPPORT == ENABLED)
787 #define SSH_MAX_CIPHER_BLOCK_SIZE AES_BLOCK_SIZE
788 #elif (SSH_TWOFISH_128_SUPPORT == ENABLED)
789 #define SSH_MAX_CIPHER_BLOCK_SIZE TWOFISH_BLOCK_SIZE
790 #elif (SSH_TWOFISH_192_SUPPORT == ENABLED)
791 #define SSH_MAX_CIPHER_BLOCK_SIZE TWOFISH_BLOCK_SIZE
792 #elif (SSH_TWOFISH_256_SUPPORT == ENABLED)
793 #define SSH_MAX_CIPHER_BLOCK_SIZE TWOFISH_BLOCK_SIZE
794 #elif (SSH_SERPENT_128_SUPPORT == ENABLED)
795 #define SSH_MAX_CIPHER_BLOCK_SIZE SERPENT_BLOCK_SIZE
796 #elif (SSH_SERPENT_192_SUPPORT == ENABLED)
797 #define SSH_MAX_CIPHER_BLOCK_SIZE SERPENT_BLOCK_SIZE
798 #elif (SSH_SERPENT_256_SUPPORT == ENABLED)
799 #define SSH_MAX_CIPHER_BLOCK_SIZE SERPENT_BLOCK_SIZE
800 #elif (SSH_CAMELLIA_128_SUPPORT == ENABLED)
801 #define SSH_MAX_CIPHER_BLOCK_SIZE CAMELLIA_BLOCK_SIZE
802 #elif (SSH_CAMELLIA_192_SUPPORT == ENABLED)
803 #define SSH_MAX_CIPHER_BLOCK_SIZE CAMELLIA_BLOCK_SIZE
804 #elif (SSH_CAMELLIA_256_SUPPORT == ENABLED)
805 #define SSH_MAX_CIPHER_BLOCK_SIZE CAMELLIA_BLOCK_SIZE
806 #elif (SSH_SEED_SUPPORT == ENABLED)
807 #define SSH_MAX_CIPHER_BLOCK_SIZE SEED_BLOCK_SIZE
808 #elif (SSH_CAST128_SUPPORT == ENABLED)
809 #define SSH_MAX_CIPHER_BLOCK_SIZE CAST128_BLOCK_SIZE
810 #elif (SSH_IDEA_SUPPORT == ENABLED)
811 #define SSH_MAX_CIPHER_BLOCK_SIZE IDEA_BLOCK_SIZE
812 #elif (SSH_BLOWFISH_SUPPORT == ENABLED)
813 #define SSH_MAX_CIPHER_BLOCK_SIZE BLOWFISH_BLOCK_SIZE
815 #define SSH_MAX_CIPHER_BLOCK_SIZE DES3_BLOCK_SIZE
819 #if (SSH_SHA512_SUPPORT == ENABLED)
820 #define SSH_MAX_HASH_DIGEST_SIZE SHA512_DIGEST_SIZE
821 #elif (SSH_SHA384_SUPPORT == ENABLED)
822 #define SSH_MAX_HASH_DIGEST_SIZE SHA384_DIGEST_SIZE
823 #elif (SSH_SHA256_SUPPORT == ENABLED)
824 #define SSH_MAX_HASH_DIGEST_SIZE SHA256_DIGEST_SIZE
825 #elif (SSH_SHA1_SUPPORT == ENABLED || SSH_SHA1_96_SUPPORT == ENABLED)
826 #define SSH_MAX_HASH_DIGEST_SIZE SHA1_DIGEST_SIZE
827 #elif (SSH_RIPEMD160_SUPPORT == ENABLED)
828 #define SSH_MAX_HASH_DIGEST_SIZE RIPEMD160_DIGEST_SIZE
830 #define SSH_MAX_HASH_DIGEST_SIZE MD5_DIGEST_SIZE
834 #if (SSH_RSA_KEX_SUPPORT == ENABLED)
835 #define SSH_MAX_RSA_SHARED_SECRET_LEN ((SSH_MAX_RSA_MODULUS_SIZE + 47) / 8)
837 #define SSH_MAX_RSA_SHARED_SECRET_LEN 0
841 #if (SSH_DH_KEX_SUPPORT == ENABLED || SSH_DH_GEX_KEX_SUPPORT == ENABLED)
842 #define SSH_MAX_DH_SHARED_SECRET_LEN ((SSH_MAX_DH_MODULUS_SIZE + 47) / 8)
844 #define SSH_MAX_DH_SHARED_SECRET_LEN 0
848 #if (SSH_ECDH_KEX_SUPPORT == ENABLED && SSH_NISTP521_SUPPORT == ENABLED)
849 #define SSH_MAX_ECDH_SHARED_SECRET_LEN 71
850 #elif (SSH_ECDH_KEX_SUPPORT == ENABLED && SSH_CURVE448_SUPPORT == ENABLED)
851 #define SSH_MAX_ECDH_SHARED_SECRET_LEN 61
852 #elif (SSH_ECDH_KEX_SUPPORT == ENABLED && SSH_NISTP384_SUPPORT == ENABLED)
853 #define SSH_MAX_ECDH_SHARED_SECRET_LEN 53
855 #define SSH_MAX_ECDH_SHARED_SECRET_LEN 37
859 #if (SSH_KEM_KEX_SUPPORT == ENABLED)
860 #define SSH_MAX_KEM_SHARED_SECRET_LEN 36
862 #define SSH_MAX_KEM_SHARED_SECRET_LEN 0
866 #if (SSH_HYBRID_KEX_SUPPORT == ENABLED && SSH_SNTRUP761_SUPPORT == ENABLED)
867 #define SSH_MAX_HYBRID_SHARED_SECRET_LEN 68
868 #elif (SSH_HYBRID_KEX_SUPPORT == ENABLED && SSH_MLKEM1024_SUPPORT == ENABLED)
869 #define SSH_MAX_HYBRID_SHARED_SECRET_LEN 68
870 #elif (SSH_HYBRID_KEX_SUPPORT == ENABLED && SSH_MLKEM768_SUPPORT == ENABLED)
871 #define SSH_MAX_HYBRID_SHARED_SECRET_LEN 52
873 #define SSH_MAX_HYBRID_SHARED_SECRET_LEN 0
877 #if (SSH_MAX_RSA_SHARED_SECRET_LEN >= SSH_MAX_DH_SHARED_SECRET_LEN && \
878 SSH_MAX_RSA_SHARED_SECRET_LEN >= SSH_MAX_ECDH_SHARED_SECRET_LEN && \
879 SSH_MAX_RSA_SHARED_SECRET_LEN >= SSH_MAX_KEM_SHARED_SECRET_LEN && \
880 SSH_MAX_RSA_SHARED_SECRET_LEN >= SSH_MAX_HYBRID_SHARED_SECRET_LEN)
881 #define SSH_MAX_SHARED_SECRET_LEN SSH_MAX_RSA_SHARED_SECRET_LEN
882 #elif (SSH_MAX_DH_SHARED_SECRET_LEN >= SSH_MAX_RSA_SHARED_SECRET_LEN && \
883 SSH_MAX_DH_SHARED_SECRET_LEN >= SSH_MAX_ECDH_SHARED_SECRET_LEN && \
884 SSH_MAX_DH_SHARED_SECRET_LEN >= SSH_MAX_KEM_SHARED_SECRET_LEN && \
885 SSH_MAX_DH_SHARED_SECRET_LEN >= SSH_MAX_HYBRID_SHARED_SECRET_LEN)
886 #define SSH_MAX_SHARED_SECRET_LEN SSH_MAX_DH_SHARED_SECRET_LEN
887 #elif (SSH_MAX_ECDH_SHARED_SECRET_LEN >= SSH_MAX_RSA_SHARED_SECRET_LEN && \
888 SSH_MAX_ECDH_SHARED_SECRET_LEN >= SSH_MAX_DH_SHARED_SECRET_LEN && \
889 SSH_MAX_ECDH_SHARED_SECRET_LEN >= SSH_MAX_KEM_SHARED_SECRET_LEN && \
890 SSH_MAX_ECDH_SHARED_SECRET_LEN >= SSH_MAX_HYBRID_SHARED_SECRET_LEN)
891 #define SSH_MAX_SHARED_SECRET_LEN SSH_MAX_ECDH_SHARED_SECRET_LEN
892 #elif (SSH_MAX_KEM_SHARED_SECRET_LEN >= SSH_MAX_RSA_SHARED_SECRET_LEN && \
893 SSH_MAX_KEM_SHARED_SECRET_LEN >= SSH_MAX_DH_SHARED_SECRET_LEN && \
894 SSH_MAX_KEM_SHARED_SECRET_LEN >= SSH_MAX_ECDH_SHARED_SECRET_LEN && \
895 SSH_MAX_KEM_SHARED_SECRET_LEN >= SSH_MAX_HYBRID_SHARED_SECRET_LEN)
896 #define SSH_MAX_SHARED_SECRET_LEN SSH_MAX_KEM_SHARED_SECRET_LEN
898 #define SSH_MAX_SHARED_SECRET_LEN SSH_MAX_HYBRID_SHARED_SECRET_LEN
902 #ifndef SSH_CONTEXT_PRIVATE
903 #define SSH_CONTEXT_PRIVATE
907 #ifndef SSH_CONNECTION_PRIVATE
908 #define SSH_CONNECTION_PRIVATE
912 #ifndef SSH_CHANNEL_PRIVATE
913 #define SSH_CHANNEL_PRIVATE
920 #define SSH_COOKIE_SIZE 16
922 #define SSH_MAX_MPINT_OVERHEAD 5
924 #define SSH_MAX_PACKET_OVERHEAD 128
927 #define SSH_BUFFER_SIZE (SSH_MAX_PACKET_SIZE + SSH_MAX_PACKET_OVERHEAD)
931 #define SshContext struct _SshContext
935 #define SshConnection struct _SshConnection
939 #define SshChannel struct _SshChannel
986 #define SSH_FLAG_BREAK(c) (SSH_FLAG_BREAK_CHAR | LSB(c))
1215 #if (SSH_CLIENT_SUPPORT == ENABLED)
1238 const uint8_t *hostKey,
size_t hostKeyLen);
1254 const uint8_t *publicKey,
size_t publicKeyLen);
1262 const char_t *user,
const uint8_t *publicKey,
size_t publicKeyLen);
1278 const char_t *user,
const char_t *password,
size_t passwordLen);
1286 const char_t *user,
const char_t *oldPassword,
size_t oldPasswordLen,
1287 const char_t *newPassword,
size_t newPasswordLen);
1297 uint8_t *
p,
size_t *written);
1348 const SshString *
type, uint32_t senderChannel, uint32_t initialWindowSize,
1394 #if (SSH_GCM_CIPHER_SUPPORT == ENABLED || SSH_RFC5647_SUPPORT == ENABLED)
1397 #if (SSH_CHACHA20_POLY1305_SUPPORT == ENABLED)
1469 #if (SSH_SERVER_SUPPORT == ENABLED && SSH_PASSWORD_AUTH_SUPPORT == ENABLED)
1482 #if (SSH_RSA_KEX_SUPPORT == ENABLED)
1487 #if (SSH_DH_GEX_KEX_SUPPORT == ENABLED)
1500 #if (SSH_HMAC_SUPPORT == ENABLED)
1503 #if (SSH_DH_KEX_SUPPORT == ENABLED || SSH_DH_GEX_KEX_SUPPORT == ENABLED)
1506 #if (SSH_ECDH_KEX_SUPPORT == ENABLED || SSH_HYBRID_KEX_SUPPORT == ENABLED)
1509 #if (SSH_HYBRID_KEX_SUPPORT == ENABLED)
1528 #if (SSH_EXT_INFO_SUPPORT == ENABLED)
1531 #if (SSH_KEX_STRICT_SUPPORT == ENABLED)
1559 #if (SSH_CLIENT_SUPPORT == ENABLED)
1564 #if (SSH_SERVER_SUPPORT == ENABLED && SSH_RSA_KEX_SUPPORT == ENABLED)
1567 #if (SSH_SERVER_SUPPORT == ENABLED && SSH_DH_GEX_KEX_SUPPORT == ENABLED)
1572 #if (SSH_CERT_SUPPORT == ENABLED)
1576 #if (SSH_PUBLIC_KEY_AUTH_SUPPORT == ENABLED)
1579 #if (SSH_PUBLIC_KEY_AUTH_SUPPORT == ENABLED && SSH_CERT_SUPPORT == ENABLED)
1582 #if (SSH_PASSWORD_AUTH_SUPPORT == ENABLED)
1586 #if (SSH_SIGN_CALLBACK_SUPPORT == ENABLED)
1590 #if (SSH_ECDH_CALLBACK_SUPPORT == ENABLED)
1604 #if (SSH_KEY_LOG_SUPPORT == ENABLED)
1706 const char_t *publicKey,
size_t publicKeyLen,
const char_t *privateKey,
1707 size_t privateKeyLen,
const char_t *password);
1712 const char_t *dhParams,
size_t dhParamsLen);
1717 const char_t *publicKey,
size_t publicKeyLen,
const char_t *privateKey,
1718 size_t privateKeyLen,
const char_t *password);
1723 const char_t *cert,
size_t certLen,
const char_t *privateKey,
1724 size_t privateKeyLen,
const char_t *password);
uint8_t h[SSH_MAX_HASH_DIGEST_SIZE]
Exchange hash H.
const PrngAlgo * prngAlgo
Pseudo-random number generator to be used.
bool_t closeSent
An SSH_MSG_CHANNEL_CLOSE message has been sent.
SocketEventDesc eventDesc[SSH_MAX_CONNECTIONS+1]
The events the application is interested in.
SshEcdhKeyPairGenCallback ecdhKeyPairGenCallback
ECDH key pair generation callback.
size_t privateKeyLen
Length of the RSA private key.
error_t(* SshChannelReqCallback)(SshChannel *channel, const SshString *type, const uint8_t *data, size_t length, void *param)
Channel request callback function.
systime_t timeout
Timeout value.
@ SSH_OPEN_RESOURCE_SHORTAGE
size_t rxWindowSizeInc
Window size increment.
Collection of key exchange algorithms.
Generic hash algorithm context.
#define SSH_MAX_CONN_CLOSE_CALLBACKS
@ SSH_CONN_STATE_USER_AUTH_REPLY
const char_t * clientEncAlgo
Selected client's encryption algorithm name.
SshOperationMode
Mode of operation.
@ SSH_CONN_STATE_KEX_KEM_REPLY
error_t sshLoadHostKey(SshContext *context, uint_t index, const char_t *publicKey, size_t publicKeyLen, const char_t *privateKey, size_t privateKeyLen, const char_t *password)
Load entity's host key.
void * globalReqParam[SSH_MAX_GLOBAL_REQ_CALLBACKS]
Opaque pointer passed to the global request callback.
SshGlobalReqCallback globalReqCallback[SSH_MAX_GLOBAL_REQ_CALLBACKS]
Global request callbacks.
@ SSH_CHANNEL_EVENT_CONNECTED
const char_t * clientMacAlgo
Selected client's MAC algorithm name.
uint_t eventMask
Requested events.
error_t sshUnloadDhGexGroup(SshContext *context, uint_t index)
Unload Diffie-Hellman group.
error_t sshInit(SshContext *context, SshConnection *connections, uint_t numConnections, SshChannel *channels, uint_t numChannels)
SSH context initialization.
@ SSH_MSG_USERAUTH_PASSWD_CHANGEREQ
error_t sshLoadCertificate(SshContext *context, uint_t index, const char_t *cert, size_t certLen, const char_t *privateKey, size_t privateKeyLen, const char_t *password)
Load entity's certificate.
SshChannelState
SSH channel state.
size_t serverHostKeyLen
Length of the server's host key, in bytes.
@ SSH_CONN_STATE_KEX_HYBRID_INIT
@ SSH_AUTH_STATUS_FAILURE
error_t sshSetExitStatus(SshChannel *channel, int32_t exitStatus)
Set exit status.
error_t(* SshCaPublicKeyVerifyCallback)(SshConnection *connection, const uint8_t *publicKey, size_t publicKeyLen)
CA public key verification callback function.
void(* SshConnectionCloseCallback)(SshConnection *connection, void *param)
Connection close callback function.
@ SSH_CONN_STATE_KEX_DH_GEX_REQUEST
void(* SshKeyLogCallback)(SshConnection *connection, const char_t *key)
Key logging callback function (for debugging purpose only)
const char_t * privateKey
Private key (PEM or OpenSSH format)
error_t sshSetPrng(SshContext *context, const PrngAlgo *prngAlgo, void *prngContext)
Set the pseudo-random number generator to be used.
@ SSH_CONN_STATE_SERVER_EXT_INFO_2
void * connectionOpenParam[SSH_MAX_CONN_OPEN_CALLBACKS]
Opaque pointer passed to the connection open callback.
const char_t * publicKeyAlgo
Public key algorithm.
@ SSH_CONN_STATE_KEX_RSA_SECRET
bool_t closeReceived
An SSH_MSG_CHANNEL_CLOSE message has been received.
SshChannelEvent
SSH channel events.
const HashAlgo * hashAlgo
Hash algorithm for MAC operations.
size_t rxBufferLen
Number of bytes available for reading.
SshContext * context
SSH context.
@ SSH_CONN_STATE_SERVICE_ACCEPT
@ SSH_MSG_KEX_HYBRID_INIT
@ SSH_AUTH_STATUS_SUCCESS
Collection of cipher algorithms.
@ SSH_DISCONNECT_COMPRESSION_ERROR
#define SSH_MAX_CHANNEL_OPEN_CALLBACKS
error_t(* SshCertAuthCallback)(SshConnection *connection, const char_t *user, const SshCertificate *cert)
Certificate authentication callback function.
@ SSH_DISCONNECT_MAC_ERROR
SshSignVerifyCallback signVerifyCallback
Signature verification callback.
size_t txBufferPos
Current position in TX buffer.
const char_t * publicKey
RSA public key (PEM, SSH2 or OpenSSH format)
Generic cipher algorithm context.
@ SSH_MSG_CHANNEL_FAILURE
GcmContext gcmContext
GCM context.
OsEvent event
Event object used to poll the sockets.
error_t sshUnloadCertificate(SshContext *context, uint_t index)
Unload entity's certificate.
size_t macSize
Size of the MAC tag, in bytes.
uint_t eventFlags
Returned events.
size_t rxWindowSize
RX flow-control window.
error_t sshRegisterEcdhSharedSecretCalcCallback(SshContext *context, SshEcdhSharedSecretCalcCallback callback)
Register ECDH shared secret calculation callback function.
SshConnectionState
SSH connection state.
void * channelReqParam[SSH_MAX_CHANNEL_REQ_CALLBACKS]
Opaque pointer passed to the channel request callback.
@ SSH_MSG_CHANNEL_SUCCESS
bool_t eofRequest
Channel EOF request.
@ SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE
Transient RSA key (for RSA key exchange)
error_t sshUnregisterConnectionOpenCallback(SshContext *context, SshConnectionOpenCallback callback)
Unregister connection open callback function.
SshConnectionCloseCallback connectionCloseCallback[SSH_MAX_CONN_CLOSE_CALLBACKS]
Connection close callback function.
SshChannel * channel
Handle to a channel to monitor.
SshChannelBuffer txBuffer
TX buffer.
@ SSH_MSG_CHANNEL_OPEN_CONFIRMATION
@ SSH_MSG_REQUEST_FAILURE
size_t txBufferLen
Number of bytes that are pending to be sent.
size_t txWindowSize
TX flow-control window.
#define SSH_MAX_SHARED_SECRET_LEN
const char_t * privateKey
RSA private key (PEM or OpenSSH format)
error_t sshRegisterCaPublicKeyVerifyCallback(SshContext *context, SshCaPublicKeyVerifyCallback callback)
Register CA public key verification callback function.
error_t sshLoadDhGexGroup(SshContext *context, uint_t index, const char_t *dhParams, size_t dhParamsLen)
Load Diffie-Hellman group.
SshCaPublicKeyVerifyCallback caPublicKeyVerifyCallback
CA public key verification callback.
SshMessageType
SSH message types.
SshConnection * connection
SSH connection.
error_t sshRegisterPasswordChangeCallback(SshContext *context, SshPasswordChangeCallback callback)
Register password change callback function.
@ SSH_CONN_STATE_KEX_DH_GEX_GROUP
@ SSH_CONN_STATE_KEX_HYBRID_REPLY
@ SSH_CONN_STATE_SERVER_EXT_INFO_1
Structure describing socket events.
char_t username[SSH_MAX_USERNAME_LEN+1]
User name.
uint_t numChannels
Maximum number of SSH channels.
char_t remoteId[SSH_MAX_ID_LEN+1]
Peer's identification string.
SshCertVerifyCallback certVerifyCallback
Certificate verification callback.
#define SSH_MAX_CIPHER_BLOCK_SIZE
@ SSH_OPEN_ADMINISTRATIVELY_PROHIBITED
@ SSH_CHANNEL_EVENT_CLOSED
@ SSH_CONN_STATE_DISCONNECT
error_t sshRegisterPasswordAuthCallback(SshContext *context, SshPasswordAuthCallback callback)
Register password authentication callback function.
@ SSH_MSG_KEX_DH_GEX_REPLY
@ SSH_REQUEST_STATE_PENDING
uint32_t remoteChannelNum
Remote channel number.
error_t sshUnregisterGlobalRequestCallback(SshContext *context, SshGlobalReqCallback callback)
Unregister global request callback function.
@ SSH_CHANNEL_EVENT_TX_READY
uint_t numConnections
Maximum number of SSH connections.
int_t dhGexGroupIndex
Index of the selected Diffie-Hellman group.
SshAuthStatus
Authentication status.
bool_t eofReceived
An SSH_MSG_CHANNEL_EOF message has been received.
@ SSH_DISCONNECT_BY_APPLICATION
error_t sshUnloadRsaKey(SshContext *context, uint_t index)
Unload transient RSA key (for RSA key exchange)
@ SSH_CHANNEL_EVENT_TX_SHUTDOWN
error_t sshReadChannel(SshChannel *channel, void *data, size_t size, size_t *received, uint_t flags)
Receive data from the specified channel.
void * channelOpenParam[SSH_MAX_CHANNEL_OPEN_CALLBACKS]
Opaque pointer passed to the channel open callback.
@ SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT
error_t sshUnloadHostKey(SshContext *context, uint_t index)
Unload entity's host key.
const char_t * keyFormatId
Key format identifier.
int32_t exitStatus
Exit status of the command.
size_t kLen
Length of the shared secret, in bytes.
size_t hLen
Length of the exchange hash, in bytes.
error_t sshCloseChannel(SshChannel *channel)
Close channel.
error_t sshLoadRsaKey(SshContext *context, uint_t index, const char_t *publicKey, size_t publicKeyLen, const char_t *privateKey, size_t privateKeyLen, const char_t *password)
Load transient RSA key (for RSA key exchange)
@ SSH_MSG_KEX_HYBRID_REPLY
CipherMode cipherMode
Cipher mode of operation.
uint8_t cookie[SSH_COOKIE_SIZE]
Random value generated by the sender.
bool_t closeRequest
Channel close request.
error_t(* SshGlobalReqCallback)(SshConnection *connection, const SshString *name, const uint8_t *data, size_t length, void *param)
Global request callback function.
@ SSH_MSG_USERAUTH_INFO_RESPONSE
bool_t disconnectRequest
Request for disconnection.
SshRsaKey rsaKeys[SSH_MAX_RSA_KEYS]
Transient RSA keys (for RSA key exchange)
error_t sshRegisterSignGenCallback(SshContext *context, SshSignGenCallback callback)
Register signature generation callback function.
uint32_t localChannelNum
Current channel number.
@ SSH_OPERATION_MODE_SERVER
@ SSH_CONN_STATE_KEX_KEM_INIT
error_t(* SshChannelOpenCallback)(SshConnection *connection, const SshString *type, uint32_t senderChannel, uint32_t initialWindowSize, uint32_t maxPacketSize, const uint8_t *data, size_t length, void *param)
Channel open callback function.
uint_t authAttempts
Number of authentication attempts.
bool_t kexInitReceived
An SSH_MSG_KEXINIT message has been received.
@ SSH_OPERATION_MODE_CLIENT
size_t publicKeyLen
Length of the RSA public key.
@ SSH_MSG_KEX_DH_GEX_REQUEST_OLD
const char_t * publicKey
Public key (PEM, SSH2 or OpenSSH format)
@ SSH_CONN_STATE_KEX_ECDH_INIT
const CipherAlgo * cipherAlgo
Cipher algorithm.
bool_t publicKeyOk
The provided host key is acceptable.
EcdhContext ecdhContext
ECDH context.
char_t passwordChangePrompt[SSH_MAX_PASSWORD_CHANGE_PROMPT_LEN+1]
Password change prompt string.
@ SSH_MSG_SERVICE_REQUEST
bool_t kexStrictReceived
"strict KEX" pseudo-algorithm received
const char_t * kexAlgo
Selected key exchange algorithm name.
error_t(* SshCertVerifyCallback)(SshConnection *connection, const SshCertificate *cert)
Certificate verification callback function.
SshChannelBuffer rxBuffer
RX buffer.
const char_t * dhParams
Diffie-Hellman parameters (PEM format)
error_t sshPollChannels(SshChannelEventDesc *eventDesc, uint_t size, OsEvent *extEvent, systime_t timeout)
Wait for one of a set of channels to become ready to perform I/O.
error_t sshRegisterKeyLogCallback(SshContext *context, SshKeyLogCallback callback)
Register key logging callback function (for debugging purpose only)
bool_t etm
Encrypt-then-MAC.
@ SSH_MSG_USERAUTH_REQUEST
bool_t eofSent
An SSH_MSG_CHANNEL_EOF message has been sent.
General definitions for cryptographic algorithms.
SshAuthStatus(* SshPasswordChangeCallback)(SshConnection *connection, const char_t *user, const char_t *oldPassword, size_t oldPasswordLen, const char_t *newPassword, size_t newPasswordLen)
Password change callback function.
CipherContext cipherContext
Cipher context.
error_t(* SshEcdhKeyPairGenCallback)(SshConnection *connection, const char_t *kexAlgo, EcPublicKey *publicKey)
ECDH key pair generation callback.
@ SSH_CONN_STATE_KEX_ECDH_REPLY
@ SSH_MSG_USERAUTH_FAILURE
const char_t * serverEncAlgo
Selected server's encryption algorithm name.
SshEncryptionEngine encryptionEngine
Encryption engine.
SshHostKey hostKeys[SSH_MAX_HOST_KEYS]
List of host keys.
@ SSH_CONN_STATE_KEX_RSA_PUB_KEY
error_t sshRegisterChannelOpenCallback(SshContext *context, SshChannelOpenCallback callback, void *param)
Register channel open callback function.
error_t sshRegisterHostKeyVerifyCallback(SshContext *context, SshHostKeyVerifyCallback callback)
Register host key verification callback function.
SshDisconnectReasonCode
Disconnection messages reason codes.
Block cipher modes of operation.
@ SSH_CONN_STATE_CLIENT_ID
@ SSH_MSG_CHANNEL_OPEN_FAILURE
size_t publicKeyLen
Length of the public key.
error_t sshSetPassword(SshContext *context, const char_t *password)
Set the password to be used for authentication.
HashContext hashContext
Exchange hash context.
error_t sshUnregisterChannelOpenCallback(SshContext *context, SshChannelOpenCallback callback)
Unregister channel open callback function.
error_t sshUnregisterChannelRequestCallback(SshContext *context, SshChannelReqCallback callback)
Unregister channel request callback function.
#define SSH_CHANNEL_BUFFER_SIZE
@ SSH_MSG_USERAUTH_BANNER
@ SSH_DISCONNECT_CONNECTION_LOST
error_t(* SshEcdhSharedSecretCalcCallback)(SshConnection *connection, const char_t *kexAlgo, const EcPublicKey *publicKey, uint8_t *output, size_t *outputLen)
ECDH shared secret calculation callback.
SshPasswordChangeCallback passwordChangeCallback
Password change callback.
bool_t newKeysReceived
An SSH_MSG_NEWKEYS message has been received.
error_t sshWriteChannel(SshChannel *channel, const void *data, size_t length, size_t *written, uint_t flags)
Write data to the specified channel.
#define SSH_MAX_HOST_KEYS
@ SSH_CHANNEL_EVENT_TIMEOUT
error_t sshRegisterConnectionCloseCallback(SshContext *context, SshConnectionCloseCallback callback, void *param)
Register connection close callback function.
error_t sshRegisterConnectionOpenCallback(SshContext *context, SshConnectionOpenCallback callback, void *param)
Register connection open callback function.
@ SSH_CONN_STATE_SERVER_NEW_KEYS
@ SSH_AUTH_STATUS_PASSWORD_EXPIRED
SshChannelOpenCallback channelOpenCallback[SSH_MAX_CHANNEL_OPEN_CALLBACKS]
Channel open callbacks.
#define SSH_CONNECTION_PRIVATE
uint8_t buffer[SSH_BUFFER_SIZE]
Internal buffer.
bool_t kexInitSent
An SSH_MSG_KEXINIT message has been sent.
@ SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED
@ SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE
error_t(* SshConnectionOpenCallback)(SshConnection *connection, void *param)
Connection open callback function.
error_t(* SshSignVerifyCallback)(SshConnection *connection, const SshString *publicKeyAlgo, const SshBinaryString *publicKeyBlob, const SshBinaryString *sessionId, const SshBinaryString *message, const SshBinaryString *signatureBlob)
Signature verification callback function.
@ SSH_MSG_USERAUTH_SUCCESS
size_t rxBufferPos
Current position in RX buffer.
@ SSH_CHANNEL_EVENT_TX_DONE
bool_t extInfoReceived
"ext-info-c" or "ext-info-s" indicator has been received
const char_t * clientCompressAlgo
Selected client's encryption algorithm name.
#define SSH_MAX_PASSWORD_CHANGE_PROMPT_LEN
@ SSH_DISCONNECT_SERVICE_NOT_AVAILABLE
#define SSH_MAX_HASH_DIGEST_SIZE
error_t sshSetPasswordChangePrompt(SshConnection *connection, const char_t *prompt)
Set password change prompt message.
uint8_t * serverHostKey
Server's host key.
uint8_t k[SSH_MAX_SHARED_SECRET_LEN]
Shared secret K.
Collection of hash algorithms.
@ SSH_CONN_STATE_USER_AUTH_SUCCESS
@ SSH_REQUEST_STATE_FAILURE
const char_t * keyFormatId
Key format identifier.
@ SSH_CONN_STATE_CLIENT_NEW_KEYS
error_t sshSetUsername(SshContext *context, const char_t *username)
Set the user name to be used for authentication.
uint32_t systime_t
System time.
#define SSH_MAX_CONNECTIONS
@ SSH_DISCONNECT_PROTOCOL_ERROR
bool_t channelSuccessSent
An SSH_MSG_CHANNEL_SUCCESS message has been sent.
Collection of AEAD algorithms.
int_t hostKeyIndex
Index of the selected host key.
void * connectionCloseParam[SSH_MAX_CONN_CLOSE_CALLBACKS]
Opaque pointer passed to the connection close callback.
#define SSH_MAX_PASSWORD_LEN
SshKeyLogCallback keyLogCallback
Key logging callback (for debugging purpose only)
#define SSH_MAX_GLOBAL_REQ_CALLBACKS
SshConnection * connections
SSH connections.
const char_t * publicKeyAlgo
Public key algorithm to use during user authentication.
@ SSH_OPEN_CONNECT_FAILED
#define SSH_MAX_ENC_KEY_SIZE
SshRequestState
SSH request states.
KemContext kemContext
KEM context.
@ SSH_DISCONNECT_AUTH_CANCELLED_BY_USER
@ SSH_REQUEST_STATE_SUCCESS
@ SSH_CHANNEL_EVENT_RX_SHUTDOWN
@ SSH_CONN_STATE_SERVER_KEX_INIT
SshChannelFlags
Flags used by read and write functions.
error_t(* SshPublicKeyAuthCallback)(SshConnection *connection, const char_t *user, const uint8_t *publicKey, size_t publicKeyLen)
Public key authentication callback function.
@ SSH_CONN_STATE_SERVER_ID
@ SSH_CONN_STATE_KEX_DH_INIT
error_t sshRegisterCertAuthCallback(SshContext *context, SshCertAuthCallback callback)
Register certificate authentication callback function.
@ SSH_MSG_CHANNEL_REQUEST
const HashAlgo * hashAlgo
Exchange hash algorithm.
@ SSH_CONN_STATE_CLIENT_EXT_INFO
SSH data type representations.
Structure describing channel events.
@ SSH_DISCONNECT_KEY_EXCHANGE_FAILED
@ SSH_CHANNEL_EVENT_RX_READY
@ SSH_CONN_STATE_KEX_RSA_DONE
const char_t * serverHostKeyAlgo
Selected server's host key algorithm name.
HmacContext hmacContext
HMAC context.
@ SSH_CONN_STATE_SERVICE_REQUEST
SshOpenFailureReasonCode
Channel connection failure reason codes.
#define SSH_MAX_CONN_OPEN_CALLBACKS
@ SSH_CONN_STATE_USER_AUTH_REQUEST
SshRequestState requestState
Channel request state.
error_t sshUnregisterConnectionCloseCallback(SshContext *context, SshConnectionCloseCallback callback)
Unregister connection close callback function.
@ SSH_MSG_CHANNEL_WINDOW_ADJUST
@ SSH_MSG_KEX_DH_GEX_INIT
@ SSH_CHANNEL_STATE_RESERVED
error_t sshRegisterChannelRequestCallback(SshContext *context, SshChannelReqCallback callback, void *param)
Register channel request callback function.
bool_t exitStatusSent
An SSH_MSG_CHANNEL_REQUEST with the exit status has been sent.
systime_t timestamp
Time stamp to manage connection timeout.
@ SSH_CONN_STATE_CLIENT_KEX_INIT
#define SSH_MAX_DH_GEX_GROUPS
error_t sshSetOperationMode(SshContext *context, SshOperationMode mode)
Set operation mode (client or server)
size_t sessionIdLen
Length of the session identifier, in bytes.
@ SSH_CONN_STATE_KEX_DH_GEX_REPLY
@ SSH_MSG_USERAUTH_INFO_REQUEST
uint8_t sessionId[SSH_MAX_HASH_DIGEST_SIZE]
Session identifier.
uint32_t localChannelNum
Local channel number.
Common interface for encryption algorithms.
error_t sshRegisterCertVerifyCallback(SshContext *context, SshCertVerifyCallback callback)
Register certificate verification callback function.
#define SSH_MAX_CHANNEL_REQ_CALLBACKS
#define SSH_CHANNEL_PRIVATE
SshAuthStatus(* SshPasswordAuthCallback)(SshConnection *connection, const char_t *user, const char_t *password, size_t passwordLen)
Password authentication callback function.
@ SSH_MSG_KEX_DH_GEX_REQUEST
SshCertAuthCallback certAuthCallback
Certificate authentication callback.
@ SSH_MSG_REQUEST_SUCCESS
char_t password[SSH_MAX_PASSWORD_LEN+1]
Password.
const char_t * serverCompressAlgo
Selected server's encryption algorithm name.
Collection of MAC algorithms.
void sshDeleteChannel(SshChannel *channel)
Release channel.
bool_t disconnectSent
An SSH_MSG_DISCONNECT message has been sent.
SshChannelReqCallback channelReqCallback[SSH_MAX_CHANNEL_REQ_CALLBACKS]
Channel request callbacks.
@ SSH_CONN_STATE_KEX_DH_REPLY
size_t privateKeyLen
Length of the private key.
SshConnectionOpenCallback connectionOpenCallback[SSH_MAX_CONN_OPEN_CALLBACKS]
Connection open callback function.
uint_t dhModulusSize
Length of the prime modulus, in bits.
@ SSH_DISCONNECT_RESERVED
HmacContext * hmacContext
HMAC context.
Common interface for hash algorithms.
SshChannelState state
Channel state.
error_t sshRegisterEcdhKeyPairGenCallback(SshContext *context, SshEcdhKeyPairGenCallback callback)
Register ECDH key pair generation callback function.
@ SSH_CONN_STATE_KEX_DH_GEX_INIT
bool_t newKeysSent
An SSH_MSG_NEWKEYS message has been sent.
@ SSH_OPEN_UNKNOWN_CHANNEL_TYPE
void * prngContext
Pseudo-random number generator context.
OsMutex mutex
Mutex preventing simultaneous access to the context.
SshRequestState requestState
Global request state.
const char_t * serverMacAlgo
Selected server's MAC algorithm name.
SshPasswordAuthCallback passwordAuthCallback
Password authentication callback.
error_t sshRegisterSignVerifyCallback(SshContext *context, SshSignVerifyCallback callback)
Register signature verification callback function.
int_t rsaKeyIndex
Index of the transient RSA key to use.
#define SSH_CONTEXT_PRIVATE
SshSignGenCallback signGenCallback
Signature generation callback.
SshDhGexGroup dhGexGroups[SSH_MAX_DH_GEX_GROUPS]
Diffie-Hellman groups.
@ SSH_CHANNEL_STATE_CLOSED
bool_t disconnectReceived
An SSH_MSG_DISCONNECT message has been received.
SshContext * context
SSH context.
SshChannel * sshCreateChannel(SshConnection *connection)
Create a new SSH channel.
char_t user[SSH_MAX_USERNAME_LEN+1]
User name.
error_t(* SshSignGenCallback)(SshConnection *connection, const char_t *publicKeyAlgo, const SshHostKey *hostKey, const SshBinaryString *sessionId, const SshBinaryString *message, uint8_t *p, size_t *written)
Signature generation callback function.
@ SSH_MSG_KEX_DH_GEX_GROUP
SshEncryptionEngine decryptionEngine
Decryption engine.
SshPublicKeyAuthCallback publicKeyAuthCallback
Public key authentication callback.
error_t(* SshHostKeyVerifyCallback)(SshConnection *connection, const uint8_t *hostKey, size_t hostKeyLen)
Host key verification callback function.
ECC (Elliptic Curve Cryptography)
#define SSH_MAX_USERNAME_LEN
@ SSH_CHANNEL_STATE_UNUSED
SshChannel * channels
SSH channels.
error_t sshRegisterGlobalRequestCallback(SshContext *context, SshGlobalReqCallback callback, void *param)
Register global request callback function.
SshConnectionState state
Connection state.
uint_t modulusSize
Length of the modulus, in bits.
DhContext dhContext
Diffie-Hellman context.
error_t sshSetChannelTimeout(SshChannel *channel, systime_t timeout)
Set timeout for read/write operations.
error_t sshRegisterPublicKeyAuthCallback(SshContext *context, SshPublicKeyAuthCallback callback)
Register public key authentication callback function.
@ SSH_DISCONNECT_TOO_MANY_CONNECTIONS
SshHostKeyVerifyCallback hostKeyVerifyCallback
Host key verification callback.
@ SSH_CONN_STATE_USER_AUTH_BANNER
const char_t * signFormatId
Signature format identifier.
SSH certificate (OpenSSH format)
size_t encKeyLen
Length of the encryption key, in bytes.
SshOperationMode mode
Mode of operation (client or server)
SshEcdhSharedSecretCalcCallback ecdhSharedSecretCalcCallback
ECDH shared secret calculation callback.
Socket * socket
Underlying socket.
uint32_t maxPacketSize
Maximum packet size.
@ SSH_CHANNEL_EVENT_TX_ACKED
error_t sshAbortChannel(SshChannel *channel)
Abort channel.
void sshDeinit(SshContext *context)
Release SSH context.
@ SSH_MSG_CHANNEL_EXTENDED_DATA
bool_t wrongGuess
A wrong guessed key exchange packet follows.
size_t dhParamsLen
Length of the Diffie-Hellman parameters.
CipherMode
Cipher operation modes.
@ SSH_DISCONNECT_ILLEGAL_USER_NAME