Print this page
6723237 libcryptoutil should allow mechanism number "0x80000000" (the value of marker CKM_VENDOR_DEFINED)

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libcryptoutil/common/mechstr.c
          +++ new/usr/src/lib/libcryptoutil/common/mechstr.c
↓ open down ↓ 15 lines elided ↑ open up ↑
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   */
  25   25  
  26      -#pragma ident   "@(#)mechstr.c  1.7     08/07/01 SMI"
       26 +#pragma ident   "@(#)mechstr.c  1.8     08/07/07 SMI"
  27   27  
  28   28  /*
  29   29   * Convert Algorithm names as strings to PKCS#11 Mech numbers and vice versa.
  30   30   */
  31   31  
  32   32  #include <limits.h>
  33   33  #include <string.h>
  34   34  #include <stdlib.h>
  35   35  #include <stdio.h>
  36   36  #include <security/cryptoki.h>
↓ open down ↓ 257 lines elided ↑ open up ↑
 294  294          { "CKM_DES_ECB_ENCRYPT_DATA", CKM_DES_ECB_ENCRYPT_DATA },
 295  295          { "CKM_DES_CBC_ENCRYPT_DATA", CKM_DES_CBC_ENCRYPT_DATA },
 296  296          { "CKM_DES3_ECB_ENCRYPT_DATA", CKM_DES3_ECB_ENCRYPT_DATA },
 297  297          { "CKM_DES3_CBC_ENCRYPT_DATA", CKM_DES3_CBC_ENCRYPT_DATA },
 298  298          { "CKM_AES_ECB_ENCRYPT_DATA", CKM_AES_ECB_ENCRYPT_DATA },
 299  299          { "CKM_AES_CBC_ENCRYPT_DATA", CKM_AES_CBC_ENCRYPT_DATA },
 300  300          { "CKM_DSA_PARAMETER_GEN", CKM_DSA_PARAMETER_GEN },
 301  301          { "CKM_DH_PKCS_PARAMETER_GEN", CKM_DH_PKCS_PARAMETER_GEN },
 302  302          { "CKM_X9_42_DH_PARAMETER_GEN", CKM_X9_42_DH_PARAMETER_GEN },
 303  303          /*
 304      -         * Values above 0x8000000 (CKM_VENDOR_DEFINED) are represented
      304 +         * Values >= 0x8000000 (CKM_VENDOR_DEFINED) are represented
 305  305           * as strings with hexadecimal numbers (e.g., "0x8123456").
 306  306           */
 307  307          { NULL, 0 }
 308  308  };
 309  309  
 310  310  
 311  311  /*
 312  312   * pkcs11_mech_comp - compare two pkcs11_mapping_t structures
 313  313   *
 314  314   * Return a strcmp-like result (positive, zero, or negative).
↓ open down ↓ 12 lines elided ↑ open up ↑
 327  327   * Anything below CKM_VENDOR_DEFINED that wasn't in the mapping table
 328  328   * at build time causes NULL to be returned.  Anything above it also
 329  329   * returns NULL since we have no way to know its real name.
 330  330   */
 331  331  const char
 332  332  *pkcs11_mech2str(CK_MECHANISM_TYPE mech)
 333  333  {
 334  334          pkcs11_mapping_t        target;
 335  335          pkcs11_mapping_t        *result = NULL;
 336  336  
 337      -        if (mech > CKM_VENDOR_DEFINED) {
      337 +        if (mech >= CKM_VENDOR_DEFINED) {
 338  338                  return (NULL);
 339  339          }
 340  340  
 341  341          /* Search for the mechanism number using bsearch(3C) */
 342  342          target.mech = mech;
 343  343          target.str = NULL;
 344  344          result = (pkcs11_mapping_t *)bsearch((void *)&target, (void *)mapping,
 345  345              (sizeof (mapping) / sizeof (pkcs11_mapping_t)) - 1,
 346  346              sizeof (pkcs11_mapping_t), pkcs11_mech_comp);
 347  347          if (result != NULL) {
↓ open down ↓ 52 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX