Print this page
6652716 Need an ARCFOUR implementation optimized for Intel EM64T
*** 21,42 ****
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
! #pragma ident "@(#)arcfour_crypt.c 1.6 08/01/02 SMI"
#include "arcfour.h"
#if defined(__amd64)
! /*
! * Use hand-tuned, processor-specific assembly version of arcfour_crypt()
! * for 64-bit x86:
! */
! #define USE_PSR_VERSION_OF_ARCFOUR_CRYPT
#endif /* __amd64 */
/* Initialize the key stream 'key' using the key value */
void
arcfour_key_init(ARCFour_key *key, uchar_t *keyval, int keyvallen)
{
/* EXPORT DELETE START */
--- 21,45 ----
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
! #pragma ident "@(#)arcfour_crypt.c 1.7 08/03/20 SMI"
#include "arcfour.h"
#if defined(__amd64)
! #ifdef _KERNEL
! #include <sys/x86_archext.h>
! #include <sys/cpuvar.h>
!
! #else
! #include <sys/auxv.h>
! #endif /* _KERNEL */
#endif /* __amd64 */
+ #if !defined(__amd64)
/* Initialize the key stream 'key' using the key value */
void
arcfour_key_init(ARCFour_key *key, uchar_t *keyval, int keyvallen)
{
/* EXPORT DELETE START */
*** 43,58 ****
uchar_t ext_keyval[256];
uchar_t tmp;
int i, j;
for (i = j = 0; i < 256; i++, j++) {
if (j == keyvallen)
j = 0;
-
ext_keyval[i] = keyval[j];
}
for (i = 0; i < 256; i++)
key->arr[i] = (uchar_t)i;
j = 0;
for (i = 0; i < 256; i++) {
--- 46,62 ----
uchar_t ext_keyval[256];
uchar_t tmp;
int i, j;
+ /* Normalize key length to 256 */
for (i = j = 0; i < 256; i++, j++) {
if (j == keyvallen)
j = 0;
ext_keyval[i] = keyval[j];
}
+
for (i = 0; i < 256; i++)
key->arr[i] = (uchar_t)i;
j = 0;
for (i = 0; i < 256; i++) {
*** 66,76 ****
/* EXPORT DELETE END */
}
- #if !defined(USE_PSR_VERSION_OF_ARCFOUR_CRYPT)
/*
* Encipher 'in' using 'key'.
* in and out can point to the same location
*/
void
--- 70,79 ----
*** 136,141 ****
}
#endif /* sun4u */
/* EXPORT DELETE END */
}
! #endif /* !USE_PSR_VERSION_OF_ARCFOUR_CRYPT */
--- 139,161 ----
}
#endif /* sun4u */
/* EXPORT DELETE END */
}
!
! #else
!
! /*
! * Return 1 if executing on Intel, otherwise 0 (e.g., AMD64).
! */
! int
! arcfour_crypt_on_intel(void)
! {
! #ifdef _KERNEL
! return (cpuid_getvendor(CPU) == X86_VENDOR_Intel);
! #else
! uint_t ui;
! (void) getisax(&ui, 1);
! return ((ui & AV_386_AMD_MMX) == 0);
! #endif /* _KERNEL */
! }
! #endif /* !__amd64 */