1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _SYS_CRYPTO_IOCTL_H 28 #define _SYS_CRYPTO_IOCTL_H 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 #include <sys/zfs_context.h> 35 #include <sys/crypto/api.h> 36 #include <sys/crypto/spi.h> 37 #include <sys/crypto/common.h> 38 39 #define CRYPTO_MAX_ATTRIBUTE_COUNT 128 40 41 #define CRYPTO_IOFLAGS_RW_SESSION 0x00000001 42 43 #define CRYPTO(x) (('y' << 8) | (x)) 44 45 #define MAX_NUM_THRESHOLD 7 46 47 /* the PKCS11 Mechanisms */ 48 #define CKM_RC4 0x00000111 49 #define CKM_DES3_ECB 0x00000132 50 #define CKM_DES3_CBC 0x00000133 51 #define CKM_MD5 0x00000210 52 #define CKM_SHA_1 0x00000220 53 #define CKM_AES_ECB 0x00001081 54 #define CKM_AES_CBC 0x00001082 55 56 /* 57 * General Purpose Ioctls 58 */ 59 60 typedef struct fl_mechs_threshold { 61 int mech_type; 62 uint32_t mech_threshold; 63 } fl_mechs_threshold_t; 64 65 typedef struct crypto_function_list { 66 boolean_t fl_digest_init; 67 boolean_t fl_digest; 68 boolean_t fl_digest_update; 69 boolean_t fl_digest_key; 70 boolean_t fl_digest_final; 71 72 boolean_t fl_encrypt_init; 73 boolean_t fl_encrypt; 74 boolean_t fl_encrypt_update; 75 boolean_t fl_encrypt_final; 76 77 boolean_t fl_decrypt_init; 78 boolean_t fl_decrypt; 79 boolean_t fl_decrypt_update; 80 boolean_t fl_decrypt_final; 81 82 boolean_t fl_mac_init; 83 boolean_t fl_mac; 84 boolean_t fl_mac_update; 85 boolean_t fl_mac_final; 86 87 boolean_t fl_sign_init; 88 boolean_t fl_sign; 89 boolean_t fl_sign_update; 90 boolean_t fl_sign_final; 91 boolean_t fl_sign_recover_init; 92 boolean_t fl_sign_recover; 93 94 boolean_t fl_verify_init; 95 boolean_t fl_verify; 96 boolean_t fl_verify_update; 97 boolean_t fl_verify_final; 98 boolean_t fl_verify_recover_init; 99 boolean_t fl_verify_recover; 100 101 boolean_t fl_digest_encrypt_update; 102 boolean_t fl_decrypt_digest_update; 103 boolean_t fl_sign_encrypt_update; 104 boolean_t fl_decrypt_verify_update; 105 106 boolean_t fl_seed_random; 107 boolean_t fl_generate_random; 108 109 boolean_t fl_session_open; 110 boolean_t fl_session_close; 111 boolean_t fl_session_login; 112 boolean_t fl_session_logout; 113 114 boolean_t fl_object_create; 115 boolean_t fl_object_copy; 116 boolean_t fl_object_destroy; 117 boolean_t fl_object_get_size; 118 boolean_t fl_object_get_attribute_value; 119 boolean_t fl_object_set_attribute_value; 120 boolean_t fl_object_find_init; 121 boolean_t fl_object_find; 122 boolean_t fl_object_find_final; 123 124 boolean_t fl_key_generate; 125 boolean_t fl_key_generate_pair; 126 boolean_t fl_key_wrap; 127 boolean_t fl_key_unwrap; 128 boolean_t fl_key_derive; 129 130 boolean_t fl_init_token; 131 boolean_t fl_init_pin; 132 boolean_t fl_set_pin; 133 134 boolean_t prov_is_limited; 135 uint32_t prov_hash_threshold; 136 uint32_t prov_hash_limit; 137 138 int total_threshold_count; 139 fl_mechs_threshold_t fl_threshold[MAX_NUM_THRESHOLD]; 140 } crypto_function_list_t; 141 142 typedef struct crypto_get_function_list { 143 uint_t fl_return_value; 144 crypto_provider_id_t fl_provider_id; 145 crypto_function_list_t fl_list; 146 } crypto_get_function_list_t; 147 148 typedef struct crypto_get_mechanism_number { 149 uint_t pn_return_value; 150 caddr_t pn_mechanism_string; 151 size_t pn_mechanism_len; 152 crypto_mech_type_t pn_internal_number; 153 } crypto_get_mechanism_number_t; 154 155 #ifdef _KERNEL 156 #ifdef _SYSCALL32 157 158 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 159 #pragma pack(4) 160 #endif 161 162 typedef struct crypto_get_mechanism_number32 { 163 uint32_t pn_return_value; 164 caddr32_t pn_mechanism_string; 165 size32_t pn_mechanism_len; 166 crypto_mech_type_t pn_internal_number; 167 } crypto_get_mechanism_number32_t; 168 169 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 170 #pragma pack() 171 #endif 172 173 #endif /* _SYSCALL32 */ 174 #endif /* _KERNEL */ 175 176 #define CRYPTO_GET_FUNCTION_LIST CRYPTO(20) 177 #define CRYPTO_GET_MECHANISM_NUMBER CRYPTO(21) 178 179 /* 180 * Session Ioctls 181 */ 182 183 typedef uint32_t crypto_flags_t; 184 185 typedef struct crypto_open_session { 186 uint_t os_return_value; 187 crypto_session_id_t os_session; 188 crypto_flags_t os_flags; 189 crypto_provider_id_t os_provider_id; 190 } crypto_open_session_t; 191 192 typedef struct crypto_close_session { 193 uint_t cs_return_value; 194 crypto_session_id_t cs_session; 195 } crypto_close_session_t; 196 197 typedef struct crypto_close_all_sessions { 198 uint_t as_return_value; 199 crypto_provider_id_t as_provider_id; 200 } crypto_close_all_sessions_t; 201 202 #define CRYPTO_OPEN_SESSION CRYPTO(30) 203 #define CRYPTO_CLOSE_SESSION CRYPTO(31) 204 #define CRYPTO_CLOSE_ALL_SESSIONS CRYPTO(32) 205 206 /* 207 * Login Ioctls 208 */ 209 typedef struct crypto_login { 210 uint_t co_return_value; 211 crypto_session_id_t co_session; 212 uint_t co_user_type; 213 uint_t co_pin_len; 214 caddr_t co_pin; 215 } crypto_login_t; 216 217 typedef struct crypto_logout { 218 uint_t cl_return_value; 219 crypto_session_id_t cl_session; 220 } crypto_logout_t; 221 222 #ifdef _KERNEL 223 #ifdef _SYSCALL32 224 225 typedef struct crypto_login32 { 226 uint32_t co_return_value; 227 crypto_session_id_t co_session; 228 uint32_t co_user_type; 229 uint32_t co_pin_len; 230 caddr32_t co_pin; 231 } crypto_login32_t; 232 233 typedef struct crypto_logout32 { 234 uint32_t cl_return_value; 235 crypto_session_id_t cl_session; 236 } crypto_logout32_t; 237 238 #endif /* _SYSCALL32 */ 239 #endif /* _KERNEL */ 240 241 #define CRYPTO_LOGIN CRYPTO(40) 242 #define CRYPTO_LOGOUT CRYPTO(41) 243 244 /* 245 * Cryptographic Ioctls 246 */ 247 typedef struct crypto_encrypt { 248 uint_t ce_return_value; 249 crypto_session_id_t ce_session; 250 size_t ce_datalen; 251 caddr_t ce_databuf; 252 size_t ce_encrlen; 253 caddr_t ce_encrbuf; 254 uint_t ce_flags; 255 } crypto_encrypt_t; 256 257 typedef struct crypto_encrypt_init { 258 uint_t ei_return_value; 259 crypto_session_id_t ei_session; 260 crypto_mechanism_t ei_mech; 261 crypto_key_t ei_key; 262 } crypto_encrypt_init_t; 263 264 typedef struct crypto_encrypt_update { 265 uint_t eu_return_value; 266 crypto_session_id_t eu_session; 267 size_t eu_datalen; 268 caddr_t eu_databuf; 269 size_t eu_encrlen; 270 caddr_t eu_encrbuf; 271 } crypto_encrypt_update_t; 272 273 typedef struct crypto_encrypt_final { 274 uint_t ef_return_value; 275 crypto_session_id_t ef_session; 276 size_t ef_encrlen; 277 caddr_t ef_encrbuf; 278 } crypto_encrypt_final_t; 279 280 typedef struct crypto_decrypt { 281 uint_t cd_return_value; 282 crypto_session_id_t cd_session; 283 size_t cd_encrlen; 284 caddr_t cd_encrbuf; 285 size_t cd_datalen; 286 caddr_t cd_databuf; 287 uint_t cd_flags; 288 } crypto_decrypt_t; 289 290 typedef struct crypto_decrypt_init { 291 uint_t di_return_value; 292 crypto_session_id_t di_session; 293 crypto_mechanism_t di_mech; 294 crypto_key_t di_key; 295 } crypto_decrypt_init_t; 296 297 typedef struct crypto_decrypt_update { 298 uint_t du_return_value; 299 crypto_session_id_t du_session; 300 size_t du_encrlen; 301 caddr_t du_encrbuf; 302 size_t du_datalen; 303 caddr_t du_databuf; 304 } crypto_decrypt_update_t; 305 306 typedef struct crypto_decrypt_final { 307 uint_t df_return_value; 308 crypto_session_id_t df_session; 309 size_t df_datalen; 310 caddr_t df_databuf; 311 } crypto_decrypt_final_t; 312 313 typedef struct crypto_digest { 314 uint_t cd_return_value; 315 crypto_session_id_t cd_session; 316 size_t cd_datalen; 317 caddr_t cd_databuf; 318 size_t cd_digestlen; 319 caddr_t cd_digestbuf; 320 } crypto_digest_t; 321 322 typedef struct crypto_digest_init { 323 uint_t di_return_value; 324 crypto_session_id_t di_session; 325 crypto_mechanism_t di_mech; 326 } crypto_digest_init_t; 327 328 typedef struct crypto_digest_update { 329 uint_t du_return_value; 330 crypto_session_id_t du_session; 331 size_t du_datalen; 332 caddr_t du_databuf; 333 } crypto_digest_update_t; 334 335 typedef struct crypto_digest_key { 336 uint_t dk_return_value; 337 crypto_session_id_t dk_session; 338 crypto_key_t dk_key; 339 } crypto_digest_key_t; 340 341 typedef struct crypto_digest_final { 342 uint_t df_return_value; 343 crypto_session_id_t df_session; 344 size_t df_digestlen; 345 caddr_t df_digestbuf; 346 } crypto_digest_final_t; 347 348 typedef struct crypto_mac { 349 uint_t cm_return_value; 350 crypto_session_id_t cm_session; 351 size_t cm_datalen; 352 caddr_t cm_databuf; 353 size_t cm_maclen; 354 caddr_t cm_macbuf; 355 } crypto_mac_t; 356 357 typedef struct crypto_mac_init { 358 uint_t mi_return_value; 359 crypto_session_id_t mi_session; 360 crypto_mechanism_t mi_mech; 361 crypto_key_t mi_key; 362 } crypto_mac_init_t; 363 364 typedef struct crypto_mac_update { 365 uint_t mu_return_value; 366 crypto_session_id_t mu_session; 367 size_t mu_datalen; 368 caddr_t mu_databuf; 369 } crypto_mac_update_t; 370 371 typedef struct crypto_mac_final { 372 uint_t mf_return_value; 373 crypto_session_id_t mf_session; 374 size_t mf_maclen; 375 caddr_t mf_macbuf; 376 } crypto_mac_final_t; 377 378 typedef struct crypto_sign { 379 uint_t cs_return_value; 380 crypto_session_id_t cs_session; 381 size_t cs_datalen; 382 caddr_t cs_databuf; 383 size_t cs_signlen; 384 caddr_t cs_signbuf; 385 } crypto_sign_t; 386 387 typedef struct crypto_sign_init { 388 uint_t si_return_value; 389 crypto_session_id_t si_session; 390 crypto_mechanism_t si_mech; 391 crypto_key_t si_key; 392 } crypto_sign_init_t; 393 394 typedef struct crypto_sign_update { 395 uint_t su_return_value; 396 crypto_session_id_t su_session; 397 size_t su_datalen; 398 caddr_t su_databuf; 399 } crypto_sign_update_t; 400 401 typedef struct crypto_sign_final { 402 uint_t sf_return_value; 403 crypto_session_id_t sf_session; 404 size_t sf_signlen; 405 caddr_t sf_signbuf; 406 } crypto_sign_final_t; 407 408 typedef struct crypto_sign_recover_init { 409 uint_t ri_return_value; 410 crypto_session_id_t ri_session; 411 crypto_mechanism_t ri_mech; 412 crypto_key_t ri_key; 413 } crypto_sign_recover_init_t; 414 415 typedef struct crypto_sign_recover { 416 uint_t sr_return_value; 417 crypto_session_id_t sr_session; 418 size_t sr_datalen; 419 caddr_t sr_databuf; 420 size_t sr_signlen; 421 caddr_t sr_signbuf; 422 } crypto_sign_recover_t; 423 424 typedef struct crypto_verify { 425 uint_t cv_return_value; 426 crypto_session_id_t cv_session; 427 size_t cv_datalen; 428 caddr_t cv_databuf; 429 size_t cv_signlen; 430 caddr_t cv_signbuf; 431 } crypto_verify_t; 432 433 typedef struct crypto_verify_init { 434 uint_t vi_return_value; 435 crypto_session_id_t vi_session; 436 crypto_mechanism_t vi_mech; 437 crypto_key_t vi_key; 438 } crypto_verify_init_t; 439 440 typedef struct crypto_verify_update { 441 uint_t vu_return_value; 442 crypto_session_id_t vu_session; 443 size_t vu_datalen; 444 caddr_t vu_databuf; 445 } crypto_verify_update_t; 446 447 typedef struct crypto_verify_final { 448 uint_t vf_return_value; 449 crypto_session_id_t vf_session; 450 size_t vf_signlen; 451 caddr_t vf_signbuf; 452 } crypto_verify_final_t; 453 454 typedef struct crypto_verify_recover_init { 455 uint_t ri_return_value; 456 crypto_session_id_t ri_session; 457 crypto_mechanism_t ri_mech; 458 crypto_key_t ri_key; 459 } crypto_verify_recover_init_t; 460 461 typedef struct crypto_verify_recover { 462 uint_t vr_return_value; 463 crypto_session_id_t vr_session; 464 size_t vr_signlen; 465 caddr_t vr_signbuf; 466 size_t vr_datalen; 467 caddr_t vr_databuf; 468 } crypto_verify_recover_t; 469 470 typedef struct crypto_digest_encrypt_update { 471 uint_t eu_return_value; 472 crypto_session_id_t eu_session; 473 size_t eu_datalen; 474 caddr_t eu_databuf; 475 size_t eu_encrlen; 476 caddr_t eu_encrbuf; 477 } crypto_digest_encrypt_update_t; 478 479 typedef struct crypto_decrypt_digest_update { 480 uint_t du_return_value; 481 crypto_session_id_t du_session; 482 size_t du_encrlen; 483 caddr_t du_encrbuf; 484 size_t du_datalen; 485 caddr_t du_databuf; 486 } crypto_decrypt_digest_update_t; 487 488 typedef struct crypto_sign_encrypt_update { 489 uint_t eu_return_value; 490 crypto_session_id_t eu_session; 491 size_t eu_datalen; 492 caddr_t eu_databuf; 493 size_t eu_encrlen; 494 caddr_t eu_encrbuf; 495 } crypto_sign_encrypt_update_t; 496 497 typedef struct crypto_decrypt_verify_update { 498 uint_t vu_return_value; 499 crypto_session_id_t vu_session; 500 size_t vu_encrlen; 501 caddr_t vu_encrbuf; 502 size_t vu_datalen; 503 caddr_t vu_databuf; 504 } crypto_decrypt_verify_update_t; 505 506 #ifdef _KERNEL 507 #ifdef _SYSCALL32 508 509 typedef struct crypto_encrypt32 { 510 uint32_t ce_return_value; 511 crypto_session_id_t ce_session; 512 size32_t ce_datalen; 513 caddr32_t ce_databuf; 514 size32_t ce_encrlen; 515 caddr32_t ce_encrbuf; 516 uint32_t ce_flags; 517 } crypto_encrypt32_t; 518 519 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 520 #pragma pack(4) 521 #endif 522 523 typedef struct crypto_encrypt_init32 { 524 uint32_t ei_return_value; 525 crypto_session_id_t ei_session; 526 crypto_mechanism32_t ei_mech; 527 crypto_key32_t ei_key; 528 } crypto_encrypt_init32_t; 529 530 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 531 #pragma pack() 532 #endif 533 534 typedef struct crypto_encrypt_update32 { 535 uint32_t eu_return_value; 536 crypto_session_id_t eu_session; 537 size32_t eu_datalen; 538 caddr32_t eu_databuf; 539 size32_t eu_encrlen; 540 caddr32_t eu_encrbuf; 541 } crypto_encrypt_update32_t; 542 543 typedef struct crypto_encrypt_final32 { 544 uint32_t ef_return_value; 545 crypto_session_id_t ef_session; 546 size32_t ef_encrlen; 547 caddr32_t ef_encrbuf; 548 } crypto_encrypt_final32_t; 549 550 typedef struct crypto_decrypt32 { 551 uint32_t cd_return_value; 552 crypto_session_id_t cd_session; 553 size32_t cd_encrlen; 554 caddr32_t cd_encrbuf; 555 size32_t cd_datalen; 556 caddr32_t cd_databuf; 557 uint32_t cd_flags; 558 } crypto_decrypt32_t; 559 560 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 561 #pragma pack(4) 562 #endif 563 564 typedef struct crypto_decrypt_init32 { 565 uint32_t di_return_value; 566 crypto_session_id_t di_session; 567 crypto_mechanism32_t di_mech; 568 crypto_key32_t di_key; 569 } crypto_decrypt_init32_t; 570 571 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 572 #pragma pack() 573 #endif 574 575 typedef struct crypto_decrypt_update32 { 576 uint32_t du_return_value; 577 crypto_session_id_t du_session; 578 size32_t du_encrlen; 579 caddr32_t du_encrbuf; 580 size32_t du_datalen; 581 caddr32_t du_databuf; 582 } crypto_decrypt_update32_t; 583 584 typedef struct crypto_decrypt_final32 { 585 uint32_t df_return_value; 586 crypto_session_id_t df_session; 587 size32_t df_datalen; 588 caddr32_t df_databuf; 589 } crypto_decrypt_final32_t; 590 591 typedef struct crypto_digest32 { 592 uint32_t cd_return_value; 593 crypto_session_id_t cd_session; 594 size32_t cd_datalen; 595 caddr32_t cd_databuf; 596 size32_t cd_digestlen; 597 caddr32_t cd_digestbuf; 598 } crypto_digest32_t; 599 600 typedef struct crypto_digest_init32 { 601 uint32_t di_return_value; 602 crypto_session_id_t di_session; 603 crypto_mechanism32_t di_mech; 604 } crypto_digest_init32_t; 605 606 typedef struct crypto_digest_update32 { 607 uint32_t du_return_value; 608 crypto_session_id_t du_session; 609 size32_t du_datalen; 610 caddr32_t du_databuf; 611 } crypto_digest_update32_t; 612 613 typedef struct crypto_digest_key32 { 614 uint32_t dk_return_value; 615 crypto_session_id_t dk_session; 616 crypto_key32_t dk_key; 617 } crypto_digest_key32_t; 618 619 typedef struct crypto_digest_final32 { 620 uint32_t df_return_value; 621 crypto_session_id_t df_session; 622 size32_t df_digestlen; 623 caddr32_t df_digestbuf; 624 } crypto_digest_final32_t; 625 626 typedef struct crypto_mac32 { 627 uint32_t cm_return_value; 628 crypto_session_id_t cm_session; 629 size32_t cm_datalen; 630 caddr32_t cm_databuf; 631 size32_t cm_maclen; 632 caddr32_t cm_macbuf; 633 } crypto_mac32_t; 634 635 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 636 #pragma pack(4) 637 #endif 638 639 typedef struct crypto_mac_init32 { 640 uint32_t mi_return_value; 641 crypto_session_id_t mi_session; 642 crypto_mechanism32_t mi_mech; 643 crypto_key32_t mi_key; 644 } crypto_mac_init32_t; 645 646 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 647 #pragma pack() 648 #endif 649 650 typedef struct crypto_mac_update32 { 651 uint32_t mu_return_value; 652 crypto_session_id_t mu_session; 653 size32_t mu_datalen; 654 caddr32_t mu_databuf; 655 } crypto_mac_update32_t; 656 657 typedef struct crypto_mac_final32 { 658 uint32_t mf_return_value; 659 crypto_session_id_t mf_session; 660 size32_t mf_maclen; 661 caddr32_t mf_macbuf; 662 } crypto_mac_final32_t; 663 664 typedef struct crypto_sign32 { 665 uint32_t cs_return_value; 666 crypto_session_id_t cs_session; 667 size32_t cs_datalen; 668 caddr32_t cs_databuf; 669 size32_t cs_signlen; 670 caddr32_t cs_signbuf; 671 } crypto_sign32_t; 672 673 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 674 #pragma pack(4) 675 #endif 676 677 typedef struct crypto_sign_init32 { 678 uint32_t si_return_value; 679 crypto_session_id_t si_session; 680 crypto_mechanism32_t si_mech; 681 crypto_key32_t si_key; 682 } crypto_sign_init32_t; 683 684 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 685 #pragma pack() 686 #endif 687 688 typedef struct crypto_sign_update32 { 689 uint32_t su_return_value; 690 crypto_session_id_t su_session; 691 size32_t su_datalen; 692 caddr32_t su_databuf; 693 } crypto_sign_update32_t; 694 695 typedef struct crypto_sign_final32 { 696 uint32_t sf_return_value; 697 crypto_session_id_t sf_session; 698 size32_t sf_signlen; 699 caddr32_t sf_signbuf; 700 } crypto_sign_final32_t; 701 702 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 703 #pragma pack(4) 704 #endif 705 706 typedef struct crypto_sign_recover_init32 { 707 uint32_t ri_return_value; 708 crypto_session_id_t ri_session; 709 crypto_mechanism32_t ri_mech; 710 crypto_key32_t ri_key; 711 } crypto_sign_recover_init32_t; 712 713 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 714 #pragma pack() 715 #endif 716 717 typedef struct crypto_sign_recover32 { 718 uint32_t sr_return_value; 719 crypto_session_id_t sr_session; 720 size32_t sr_datalen; 721 caddr32_t sr_databuf; 722 size32_t sr_signlen; 723 caddr32_t sr_signbuf; 724 } crypto_sign_recover32_t; 725 726 typedef struct crypto_verify32 { 727 uint32_t cv_return_value; 728 crypto_session_id_t cv_session; 729 size32_t cv_datalen; 730 caddr32_t cv_databuf; 731 size32_t cv_signlen; 732 caddr32_t cv_signbuf; 733 } crypto_verify32_t; 734 735 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 736 #pragma pack(4) 737 #endif 738 739 typedef struct crypto_verify_init32 { 740 uint32_t vi_return_value; 741 crypto_session_id_t vi_session; 742 crypto_mechanism32_t vi_mech; 743 crypto_key32_t vi_key; 744 } crypto_verify_init32_t; 745 746 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 747 #pragma pack() 748 #endif 749 750 typedef struct crypto_verify_update32 { 751 uint32_t vu_return_value; 752 crypto_session_id_t vu_session; 753 size32_t vu_datalen; 754 caddr32_t vu_databuf; 755 } crypto_verify_update32_t; 756 757 typedef struct crypto_verify_final32 { 758 uint32_t vf_return_value; 759 crypto_session_id_t vf_session; 760 size32_t vf_signlen; 761 caddr32_t vf_signbuf; 762 } crypto_verify_final32_t; 763 764 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 765 #pragma pack(4) 766 #endif 767 768 typedef struct crypto_verify_recover_init32 { 769 uint32_t ri_return_value; 770 crypto_session_id_t ri_session; 771 crypto_mechanism32_t ri_mech; 772 crypto_key32_t ri_key; 773 } crypto_verify_recover_init32_t; 774 775 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 776 #pragma pack() 777 #endif 778 779 typedef struct crypto_verify_recover32 { 780 uint32_t vr_return_value; 781 crypto_session_id_t vr_session; 782 size32_t vr_signlen; 783 caddr32_t vr_signbuf; 784 size32_t vr_datalen; 785 caddr32_t vr_databuf; 786 } crypto_verify_recover32_t; 787 788 typedef struct crypto_digest_encrypt_update32 { 789 uint32_t eu_return_value; 790 crypto_session_id_t eu_session; 791 size32_t eu_datalen; 792 caddr32_t eu_databuf; 793 size32_t eu_encrlen; 794 caddr32_t eu_encrbuf; 795 } crypto_digest_encrypt_update32_t; 796 797 typedef struct crypto_decrypt_digest_update32 { 798 uint32_t du_return_value; 799 crypto_session_id_t du_session; 800 size32_t du_encrlen; 801 caddr32_t du_encrbuf; 802 size32_t du_datalen; 803 caddr32_t du_databuf; 804 } crypto_decrypt_digest_update32_t; 805 806 typedef struct crypto_sign_encrypt_update32 { 807 uint32_t eu_return_value; 808 crypto_session_id_t eu_session; 809 size32_t eu_datalen; 810 caddr32_t eu_databuf; 811 size32_t eu_encrlen; 812 caddr32_t eu_encrbuf; 813 } crypto_sign_encrypt_update32_t; 814 815 typedef struct crypto_decrypt_verify_update32 { 816 uint32_t vu_return_value; 817 crypto_session_id_t vu_session; 818 size32_t vu_encrlen; 819 caddr32_t vu_encrbuf; 820 size32_t vu_datalen; 821 caddr32_t vu_databuf; 822 } crypto_decrypt_verify_update32_t; 823 824 #endif /* _SYSCALL32 */ 825 #endif /* _KERNEL */ 826 827 #define CRYPTO_ENCRYPT CRYPTO(50) 828 #define CRYPTO_ENCRYPT_INIT CRYPTO(51) 829 #define CRYPTO_ENCRYPT_UPDATE CRYPTO(52) 830 #define CRYPTO_ENCRYPT_FINAL CRYPTO(53) 831 #define CRYPTO_DECRYPT CRYPTO(54) 832 #define CRYPTO_DECRYPT_INIT CRYPTO(55) 833 #define CRYPTO_DECRYPT_UPDATE CRYPTO(56) 834 #define CRYPTO_DECRYPT_FINAL CRYPTO(57) 835 836 #define CRYPTO_DIGEST CRYPTO(58) 837 #define CRYPTO_DIGEST_INIT CRYPTO(59) 838 #define CRYPTO_DIGEST_UPDATE CRYPTO(60) 839 #define CRYPTO_DIGEST_KEY CRYPTO(61) 840 #define CRYPTO_DIGEST_FINAL CRYPTO(62) 841 #define CRYPTO_MAC CRYPTO(63) 842 #define CRYPTO_MAC_INIT CRYPTO(64) 843 #define CRYPTO_MAC_UPDATE CRYPTO(65) 844 #define CRYPTO_MAC_FINAL CRYPTO(66) 845 846 #define CRYPTO_SIGN CRYPTO(67) 847 #define CRYPTO_SIGN_INIT CRYPTO(68) 848 #define CRYPTO_SIGN_UPDATE CRYPTO(69) 849 #define CRYPTO_SIGN_FINAL CRYPTO(70) 850 #define CRYPTO_SIGN_RECOVER_INIT CRYPTO(71) 851 #define CRYPTO_SIGN_RECOVER CRYPTO(72) 852 #define CRYPTO_VERIFY CRYPTO(73) 853 #define CRYPTO_VERIFY_INIT CRYPTO(74) 854 #define CRYPTO_VERIFY_UPDATE CRYPTO(75) 855 #define CRYPTO_VERIFY_FINAL CRYPTO(76) 856 #define CRYPTO_VERIFY_RECOVER_INIT CRYPTO(77) 857 #define CRYPTO_VERIFY_RECOVER CRYPTO(78) 858 859 #define CRYPTO_DIGEST_ENCRYPT_UPDATE CRYPTO(79) 860 #define CRYPTO_DECRYPT_DIGEST_UPDATE CRYPTO(80) 861 #define CRYPTO_SIGN_ENCRYPT_UPDATE CRYPTO(81) 862 #define CRYPTO_DECRYPT_VERIFY_UPDATE CRYPTO(82) 863 864 /* 865 * Random Number Ioctls 866 */ 867 typedef struct crypto_seed_random { 868 uint_t sr_return_value; 869 crypto_session_id_t sr_session; 870 size_t sr_seedlen; 871 caddr_t sr_seedbuf; 872 } crypto_seed_random_t; 873 874 typedef struct crypto_generate_random { 875 uint_t gr_return_value; 876 crypto_session_id_t gr_session; 877 caddr_t gr_buf; 878 size_t gr_buflen; 879 } crypto_generate_random_t; 880 881 #ifdef _KERNEL 882 #ifdef _SYSCALL32 883 884 typedef struct crypto_seed_random32 { 885 uint32_t sr_return_value; 886 crypto_session_id_t sr_session; 887 size32_t sr_seedlen; 888 caddr32_t sr_seedbuf; 889 } crypto_seed_random32_t; 890 891 typedef struct crypto_generate_random32 { 892 uint32_t gr_return_value; 893 crypto_session_id_t gr_session; 894 caddr32_t gr_buf; 895 size32_t gr_buflen; 896 } crypto_generate_random32_t; 897 898 #endif /* _SYSCALL32 */ 899 #endif /* _KERNEL */ 900 901 #define CRYPTO_SEED_RANDOM CRYPTO(90) 902 #define CRYPTO_GENERATE_RANDOM CRYPTO(91) 903 904 /* 905 * Object Management Ioctls 906 */ 907 typedef struct crypto_object_create { 908 uint_t oc_return_value; 909 crypto_session_id_t oc_session; 910 crypto_object_id_t oc_handle; 911 uint_t oc_count; 912 caddr_t oc_attributes; 913 } crypto_object_create_t; 914 915 typedef struct crypto_object_copy { 916 uint_t oc_return_value; 917 crypto_session_id_t oc_session; 918 crypto_object_id_t oc_handle; 919 crypto_object_id_t oc_new_handle; 920 uint_t oc_count; 921 caddr_t oc_new_attributes; 922 } crypto_object_copy_t; 923 924 typedef struct crypto_object_destroy { 925 uint_t od_return_value; 926 crypto_session_id_t od_session; 927 crypto_object_id_t od_handle; 928 } crypto_object_destroy_t; 929 930 typedef struct crypto_object_get_attribute_value { 931 uint_t og_return_value; 932 crypto_session_id_t og_session; 933 crypto_object_id_t og_handle; 934 uint_t og_count; 935 caddr_t og_attributes; 936 } crypto_object_get_attribute_value_t; 937 938 typedef struct crypto_object_get_size { 939 uint_t gs_return_value; 940 crypto_session_id_t gs_session; 941 crypto_object_id_t gs_handle; 942 size_t gs_size; 943 } crypto_object_get_size_t; 944 945 typedef struct crypto_object_set_attribute_value { 946 uint_t sa_return_value; 947 crypto_session_id_t sa_session; 948 crypto_object_id_t sa_handle; 949 uint_t sa_count; 950 caddr_t sa_attributes; 951 } crypto_object_set_attribute_value_t; 952 953 typedef struct crypto_object_find_init { 954 uint_t fi_return_value; 955 crypto_session_id_t fi_session; 956 uint_t fi_count; 957 caddr_t fi_attributes; 958 } crypto_object_find_init_t; 959 960 typedef struct crypto_object_find_update { 961 uint_t fu_return_value; 962 crypto_session_id_t fu_session; 963 uint_t fu_max_count; 964 uint_t fu_count; 965 caddr_t fu_handles; 966 } crypto_object_find_update_t; 967 968 typedef struct crypto_object_find_final { 969 uint_t ff_return_value; 970 crypto_session_id_t ff_session; 971 } crypto_object_find_final_t; 972 973 #ifdef _KERNEL 974 #ifdef _SYSCALL32 975 976 typedef struct crypto_object_create32 { 977 uint32_t oc_return_value; 978 crypto_session_id_t oc_session; 979 crypto_object_id_t oc_handle; 980 uint32_t oc_count; 981 caddr32_t oc_attributes; 982 } crypto_object_create32_t; 983 984 typedef struct crypto_object_copy32 { 985 uint32_t oc_return_value; 986 crypto_session_id_t oc_session; 987 crypto_object_id_t oc_handle; 988 crypto_object_id_t oc_new_handle; 989 uint32_t oc_count; 990 caddr32_t oc_new_attributes; 991 } crypto_object_copy32_t; 992 993 typedef struct crypto_object_destroy32 { 994 uint32_t od_return_value; 995 crypto_session_id_t od_session; 996 crypto_object_id_t od_handle; 997 } crypto_object_destroy32_t; 998 999 typedef struct crypto_object_get_attribute_value32 { 1000 uint32_t og_return_value; 1001 crypto_session_id_t og_session; 1002 crypto_object_id_t og_handle; 1003 uint32_t og_count; 1004 caddr32_t og_attributes; 1005 } crypto_object_get_attribute_value32_t; 1006 1007 typedef struct crypto_object_get_size32 { 1008 uint32_t gs_return_value; 1009 crypto_session_id_t gs_session; 1010 crypto_object_id_t gs_handle; 1011 size32_t gs_size; 1012 } crypto_object_get_size32_t; 1013 1014 typedef struct crypto_object_set_attribute_value32 { 1015 uint32_t sa_return_value; 1016 crypto_session_id_t sa_session; 1017 crypto_object_id_t sa_handle; 1018 uint32_t sa_count; 1019 caddr32_t sa_attributes; 1020 } crypto_object_set_attribute_value32_t; 1021 1022 typedef struct crypto_object_find_init32 { 1023 uint32_t fi_return_value; 1024 crypto_session_id_t fi_session; 1025 uint32_t fi_count; 1026 caddr32_t fi_attributes; 1027 } crypto_object_find_init32_t; 1028 1029 typedef struct crypto_object_find_update32 { 1030 uint32_t fu_return_value; 1031 crypto_session_id_t fu_session; 1032 uint32_t fu_max_count; 1033 uint32_t fu_count; 1034 caddr32_t fu_handles; 1035 } crypto_object_find_update32_t; 1036 1037 typedef struct crypto_object_find_final32 { 1038 uint32_t ff_return_value; 1039 crypto_session_id_t ff_session; 1040 } crypto_object_find_final32_t; 1041 1042 #endif /* _SYSCALL32 */ 1043 #endif /* _KERNEL */ 1044 1045 #define CRYPTO_OBJECT_CREATE CRYPTO(100) 1046 #define CRYPTO_OBJECT_COPY CRYPTO(101) 1047 #define CRYPTO_OBJECT_DESTROY CRYPTO(102) 1048 #define CRYPTO_OBJECT_GET_ATTRIBUTE_VALUE CRYPTO(103) 1049 #define CRYPTO_OBJECT_GET_SIZE CRYPTO(104) 1050 #define CRYPTO_OBJECT_SET_ATTRIBUTE_VALUE CRYPTO(105) 1051 #define CRYPTO_OBJECT_FIND_INIT CRYPTO(106) 1052 #define CRYPTO_OBJECT_FIND_UPDATE CRYPTO(107) 1053 #define CRYPTO_OBJECT_FIND_FINAL CRYPTO(108) 1054 1055 /* 1056 * Key Generation Ioctls 1057 */ 1058 typedef struct crypto_object_generate_key { 1059 uint_t gk_return_value; 1060 crypto_session_id_t gk_session; 1061 crypto_object_id_t gk_handle; 1062 crypto_mechanism_t gk_mechanism; 1063 uint_t gk_count; 1064 caddr_t gk_attributes; 1065 } crypto_object_generate_key_t; 1066 1067 typedef struct crypto_object_generate_key_pair { 1068 uint_t kp_return_value; 1069 crypto_session_id_t kp_session; 1070 crypto_object_id_t kp_public_handle; 1071 crypto_object_id_t kp_private_handle; 1072 uint_t kp_public_count; 1073 uint_t kp_private_count; 1074 caddr_t kp_public_attributes; 1075 caddr_t kp_private_attributes; 1076 crypto_mechanism_t kp_mechanism; 1077 } crypto_object_generate_key_pair_t; 1078 1079 typedef struct crypto_object_wrap_key { 1080 uint_t wk_return_value; 1081 crypto_session_id_t wk_session; 1082 crypto_mechanism_t wk_mechanism; 1083 crypto_key_t wk_wrapping_key; 1084 crypto_object_id_t wk_object_handle; 1085 size_t wk_wrapped_key_len; 1086 caddr_t wk_wrapped_key; 1087 } crypto_object_wrap_key_t; 1088 1089 typedef struct crypto_object_unwrap_key { 1090 uint_t uk_return_value; 1091 crypto_session_id_t uk_session; 1092 crypto_mechanism_t uk_mechanism; 1093 crypto_key_t uk_unwrapping_key; 1094 crypto_object_id_t uk_object_handle; 1095 size_t uk_wrapped_key_len; 1096 caddr_t uk_wrapped_key; 1097 uint_t uk_count; 1098 caddr_t uk_attributes; 1099 } crypto_object_unwrap_key_t; 1100 1101 typedef struct crypto_derive_key { 1102 uint_t dk_return_value; 1103 crypto_session_id_t dk_session; 1104 crypto_mechanism_t dk_mechanism; 1105 crypto_key_t dk_base_key; 1106 crypto_object_id_t dk_object_handle; 1107 uint_t dk_count; 1108 caddr_t dk_attributes; 1109 } crypto_derive_key_t; 1110 1111 #ifdef _KERNEL 1112 #ifdef _SYSCALL32 1113 1114 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 1115 #pragma pack(4) 1116 #endif 1117 1118 typedef struct crypto_object_generate_key32 { 1119 uint32_t gk_return_value; 1120 crypto_session_id_t gk_session; 1121 crypto_object_id_t gk_handle; 1122 crypto_mechanism32_t gk_mechanism; 1123 uint32_t gk_count; 1124 caddr32_t gk_attributes; 1125 } crypto_object_generate_key32_t; 1126 1127 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 1128 #pragma pack() 1129 #endif 1130 1131 typedef struct crypto_object_generate_key_pair32 { 1132 uint32_t kp_return_value; 1133 crypto_session_id_t kp_session; 1134 crypto_object_id_t kp_public_handle; 1135 crypto_object_id_t kp_private_handle; 1136 uint32_t kp_public_count; 1137 uint32_t kp_private_count; 1138 caddr32_t kp_public_attributes; 1139 caddr32_t kp_private_attributes; 1140 crypto_mechanism32_t kp_mechanism; 1141 } crypto_object_generate_key_pair32_t; 1142 1143 typedef struct crypto_object_wrap_key32 { 1144 uint32_t wk_return_value; 1145 crypto_session_id_t wk_session; 1146 crypto_mechanism32_t wk_mechanism; 1147 crypto_key32_t wk_wrapping_key; 1148 crypto_object_id_t wk_object_handle; 1149 size32_t wk_wrapped_key_len; 1150 caddr32_t wk_wrapped_key; 1151 } crypto_object_wrap_key32_t; 1152 1153 typedef struct crypto_object_unwrap_key32 { 1154 uint32_t uk_return_value; 1155 crypto_session_id_t uk_session; 1156 crypto_mechanism32_t uk_mechanism; 1157 crypto_key32_t uk_unwrapping_key; 1158 crypto_object_id_t uk_object_handle; 1159 size32_t uk_wrapped_key_len; 1160 caddr32_t uk_wrapped_key; 1161 uint32_t uk_count; 1162 caddr32_t uk_attributes; 1163 } crypto_object_unwrap_key32_t; 1164 1165 typedef struct crypto_derive_key32 { 1166 uint32_t dk_return_value; 1167 crypto_session_id_t dk_session; 1168 crypto_mechanism32_t dk_mechanism; 1169 crypto_key32_t dk_base_key; 1170 crypto_object_id_t dk_object_handle; 1171 uint32_t dk_count; 1172 caddr32_t dk_attributes; 1173 } crypto_derive_key32_t; 1174 1175 #endif /* _SYSCALL32 */ 1176 #endif /* _KERNEL */ 1177 1178 #define CRYPTO_GENERATE_KEY CRYPTO(110) 1179 #define CRYPTO_GENERATE_KEY_PAIR CRYPTO(111) 1180 #define CRYPTO_WRAP_KEY CRYPTO(112) 1181 #define CRYPTO_UNWRAP_KEY CRYPTO(113) 1182 #define CRYPTO_DERIVE_KEY CRYPTO(114) 1183 1184 /* 1185 * Provider Management Ioctls 1186 */ 1187 1188 typedef struct crypto_get_provider_list { 1189 uint_t pl_return_value; 1190 uint_t pl_count; 1191 crypto_provider_entry_t pl_list[1]; 1192 } crypto_get_provider_list_t; 1193 1194 typedef struct crypto_provider_data { 1195 uchar_t pd_prov_desc[CRYPTO_PROVIDER_DESCR_MAX_LEN]; 1196 uchar_t pd_label[CRYPTO_EXT_SIZE_LABEL]; 1197 uchar_t pd_manufacturerID[CRYPTO_EXT_SIZE_MANUF]; 1198 uchar_t pd_model[CRYPTO_EXT_SIZE_MODEL]; 1199 uchar_t pd_serial_number[CRYPTO_EXT_SIZE_SERIAL]; 1200 ulong_t pd_flags; 1201 ulong_t pd_max_session_count; 1202 ulong_t pd_session_count; 1203 ulong_t pd_max_rw_session_count; 1204 ulong_t pd_rw_session_count; 1205 ulong_t pd_max_pin_len; 1206 ulong_t pd_min_pin_len; 1207 ulong_t pd_total_public_memory; 1208 ulong_t pd_free_public_memory; 1209 ulong_t pd_total_private_memory; 1210 ulong_t pd_free_private_memory; 1211 crypto_version_t pd_hardware_version; 1212 crypto_version_t pd_firmware_version; 1213 uchar_t pd_time[CRYPTO_EXT_SIZE_TIME]; 1214 } crypto_provider_data_t; 1215 1216 typedef struct crypto_get_provider_info { 1217 uint_t gi_return_value; 1218 crypto_provider_id_t gi_provider_id; 1219 crypto_provider_data_t gi_provider_data; 1220 } crypto_get_provider_info_t; 1221 1222 typedef struct crypto_get_provider_mechanisms { 1223 uint_t pm_return_value; 1224 crypto_provider_id_t pm_provider_id; 1225 uint_t pm_count; 1226 crypto_mech_name_t pm_list[1]; 1227 } crypto_get_provider_mechanisms_t; 1228 1229 typedef struct crypto_get_provider_mechanism_info { 1230 uint_t mi_return_value; 1231 crypto_provider_id_t mi_provider_id; 1232 crypto_mech_name_t mi_mechanism_name; 1233 uint32_t mi_min_key_size; 1234 uint32_t mi_max_key_size; 1235 uint32_t mi_flags; 1236 } crypto_get_provider_mechanism_info_t; 1237 1238 typedef struct crypto_init_token { 1239 uint_t it_return_value; 1240 crypto_provider_id_t it_provider_id; 1241 caddr_t it_pin; 1242 size_t it_pin_len; 1243 caddr_t it_label; 1244 } crypto_init_token_t; 1245 1246 typedef struct crypto_init_pin { 1247 uint_t ip_return_value; 1248 crypto_session_id_t ip_session; 1249 caddr_t ip_pin; 1250 size_t ip_pin_len; 1251 } crypto_init_pin_t; 1252 1253 typedef struct crypto_set_pin { 1254 uint_t sp_return_value; 1255 crypto_session_id_t sp_session; 1256 caddr_t sp_old_pin; 1257 size_t sp_old_len; 1258 caddr_t sp_new_pin; 1259 size_t sp_new_len; 1260 } crypto_set_pin_t; 1261 1262 #ifdef _KERNEL 1263 #ifdef _SYSCALL32 1264 1265 typedef struct crypto_get_provider_list32 { 1266 uint32_t pl_return_value; 1267 uint32_t pl_count; 1268 crypto_provider_entry_t pl_list[1]; 1269 } crypto_get_provider_list32_t; 1270 1271 typedef struct crypto_version32 { 1272 uchar_t cv_major; 1273 uchar_t cv_minor; 1274 } crypto_version32_t; 1275 1276 typedef struct crypto_provider_data32 { 1277 uchar_t pd_prov_desc[CRYPTO_PROVIDER_DESCR_MAX_LEN]; 1278 uchar_t pd_label[CRYPTO_EXT_SIZE_LABEL]; 1279 uchar_t pd_manufacturerID[CRYPTO_EXT_SIZE_MANUF]; 1280 uchar_t pd_model[CRYPTO_EXT_SIZE_MODEL]; 1281 uchar_t pd_serial_number[CRYPTO_EXT_SIZE_SERIAL]; 1282 uint32_t pd_flags; 1283 uint32_t pd_max_session_count; 1284 uint32_t pd_session_count; 1285 uint32_t pd_max_rw_session_count; 1286 uint32_t pd_rw_session_count; 1287 uint32_t pd_max_pin_len; 1288 uint32_t pd_min_pin_len; 1289 uint32_t pd_total_public_memory; 1290 uint32_t pd_free_public_memory; 1291 uint32_t pd_total_private_memory; 1292 uint32_t pd_free_private_memory; 1293 crypto_version32_t pd_hardware_version; 1294 crypto_version32_t pd_firmware_version; 1295 uchar_t pd_time[CRYPTO_EXT_SIZE_TIME]; 1296 } crypto_provider_data32_t; 1297 1298 typedef struct crypto_get_provider_info32 { 1299 uint32_t gi_return_value; 1300 crypto_provider_id_t gi_provider_id; 1301 crypto_provider_data32_t gi_provider_data; 1302 } crypto_get_provider_info32_t; 1303 1304 typedef struct crypto_get_provider_mechanisms32 { 1305 uint32_t pm_return_value; 1306 crypto_provider_id_t pm_provider_id; 1307 uint32_t pm_count; 1308 crypto_mech_name_t pm_list[1]; 1309 } crypto_get_provider_mechanisms32_t; 1310 1311 typedef struct crypto_init_token32 { 1312 uint32_t it_return_value; 1313 crypto_provider_id_t it_provider_id; 1314 caddr32_t it_pin; 1315 size32_t it_pin_len; 1316 caddr32_t it_label; 1317 } crypto_init_token32_t; 1318 1319 typedef struct crypto_init_pin32 { 1320 uint32_t ip_return_value; 1321 crypto_session_id_t ip_session; 1322 caddr32_t ip_pin; 1323 size32_t ip_pin_len; 1324 } crypto_init_pin32_t; 1325 1326 typedef struct crypto_set_pin32 { 1327 uint32_t sp_return_value; 1328 crypto_session_id_t sp_session; 1329 caddr32_t sp_old_pin; 1330 size32_t sp_old_len; 1331 caddr32_t sp_new_pin; 1332 size32_t sp_new_len; 1333 } crypto_set_pin32_t; 1334 1335 #endif /* _SYSCALL32 */ 1336 #endif /* _KERNEL */ 1337 1338 #define CRYPTO_GET_PROVIDER_LIST CRYPTO(120) 1339 #define CRYPTO_GET_PROVIDER_INFO CRYPTO(121) 1340 #define CRYPTO_GET_PROVIDER_MECHANISMS CRYPTO(122) 1341 #define CRYPTO_GET_PROVIDER_MECHANISM_INFO CRYPTO(123) 1342 #define CRYPTO_INIT_TOKEN CRYPTO(124) 1343 #define CRYPTO_INIT_PIN CRYPTO(125) 1344 #define CRYPTO_SET_PIN CRYPTO(126) 1345 1346 /* 1347 * No (Key) Store Key Generation Ioctls 1348 */ 1349 typedef struct crypto_nostore_generate_key { 1350 uint_t ngk_return_value; 1351 crypto_session_id_t ngk_session; 1352 crypto_mechanism_t ngk_mechanism; 1353 uint_t ngk_in_count; 1354 uint_t ngk_out_count; 1355 caddr_t ngk_in_attributes; 1356 caddr_t ngk_out_attributes; 1357 } crypto_nostore_generate_key_t; 1358 1359 typedef struct crypto_nostore_generate_key_pair { 1360 uint_t nkp_return_value; 1361 crypto_session_id_t nkp_session; 1362 uint_t nkp_in_public_count; 1363 uint_t nkp_in_private_count; 1364 uint_t nkp_out_public_count; 1365 uint_t nkp_out_private_count; 1366 caddr_t nkp_in_public_attributes; 1367 caddr_t nkp_in_private_attributes; 1368 caddr_t nkp_out_public_attributes; 1369 caddr_t nkp_out_private_attributes; 1370 crypto_mechanism_t nkp_mechanism; 1371 } crypto_nostore_generate_key_pair_t; 1372 1373 typedef struct crypto_nostore_derive_key { 1374 uint_t ndk_return_value; 1375 crypto_session_id_t ndk_session; 1376 crypto_mechanism_t ndk_mechanism; 1377 crypto_key_t ndk_base_key; 1378 uint_t ndk_in_count; 1379 uint_t ndk_out_count; 1380 caddr_t ndk_in_attributes; 1381 caddr_t ndk_out_attributes; 1382 } crypto_nostore_derive_key_t; 1383 1384 #ifdef _KERNEL 1385 #ifdef _SYSCALL32 1386 1387 typedef struct crypto_nostore_generate_key32 { 1388 uint32_t ngk_return_value; 1389 crypto_session_id_t ngk_session; 1390 crypto_mechanism32_t ngk_mechanism; 1391 uint32_t ngk_in_count; 1392 uint32_t ngk_out_count; 1393 caddr32_t ngk_in_attributes; 1394 caddr32_t ngk_out_attributes; 1395 } crypto_nostore_generate_key32_t; 1396 1397 typedef struct crypto_nostore_generate_key_pair32 { 1398 uint32_t nkp_return_value; 1399 crypto_session_id_t nkp_session; 1400 uint32_t nkp_in_public_count; 1401 uint32_t nkp_in_private_count; 1402 uint32_t nkp_out_public_count; 1403 uint32_t nkp_out_private_count; 1404 caddr32_t nkp_in_public_attributes; 1405 caddr32_t nkp_in_private_attributes; 1406 caddr32_t nkp_out_public_attributes; 1407 caddr32_t nkp_out_private_attributes; 1408 crypto_mechanism32_t nkp_mechanism; 1409 } crypto_nostore_generate_key_pair32_t; 1410 1411 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 1412 #pragma pack(4) 1413 #endif 1414 1415 typedef struct crypto_nostore_derive_key32 { 1416 uint32_t ndk_return_value; 1417 crypto_session_id_t ndk_session; 1418 crypto_mechanism32_t ndk_mechanism; 1419 crypto_key32_t ndk_base_key; 1420 uint32_t ndk_in_count; 1421 uint32_t ndk_out_count; 1422 caddr32_t ndk_in_attributes; 1423 caddr32_t ndk_out_attributes; 1424 } crypto_nostore_derive_key32_t; 1425 1426 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 1427 #pragma pack() 1428 #endif 1429 1430 #endif /* _SYSCALL32 */ 1431 #endif /* _KERNEL */ 1432 1433 #define CRYPTO_NOSTORE_GENERATE_KEY CRYPTO(127) 1434 #define CRYPTO_NOSTORE_GENERATE_KEY_PAIR CRYPTO(128) 1435 #define CRYPTO_NOSTORE_DERIVE_KEY CRYPTO(129) 1436 1437 /* 1438 * Mechanism Ioctls 1439 */ 1440 1441 typedef struct crypto_get_mechanism_list { 1442 uint_t ml_return_value; 1443 uint_t ml_count; 1444 crypto_mech_name_t ml_list[1]; 1445 } crypto_get_mechanism_list_t; 1446 1447 typedef struct crypto_get_all_mechanism_info { 1448 uint_t mi_return_value; 1449 crypto_mech_name_t mi_mechanism_name; 1450 uint_t mi_count; 1451 crypto_mechanism_info_t mi_list[1]; 1452 } crypto_get_all_mechanism_info_t; 1453 1454 #ifdef _KERNEL 1455 #ifdef _SYSCALL32 1456 1457 typedef struct crypto_get_mechanism_list32 { 1458 uint32_t ml_return_value; 1459 uint32_t ml_count; 1460 crypto_mech_name_t ml_list[1]; 1461 } crypto_get_mechanism_list32_t; 1462 1463 typedef struct crypto_get_all_mechanism_info32 { 1464 uint32_t mi_return_value; 1465 crypto_mech_name_t mi_mechanism_name; 1466 uint32_t mi_count; 1467 crypto_mechanism_info32_t mi_list[1]; 1468 } crypto_get_all_mechanism_info32_t; 1469 1470 #endif /* _SYSCALL32 */ 1471 #endif /* _KERNEL */ 1472 1473 #define CRYPTO_GET_MECHANISM_LIST CRYPTO(140) 1474 #define CRYPTO_GET_ALL_MECHANISM_INFO CRYPTO(141) 1475 1476 #ifdef __cplusplus 1477 } 1478 #endif 1479 1480 #endif /* _SYS_CRYPTO_IOCTL_H */ 1481