4 # FILE: SPT--SPTUser.php
6 # Part of the Collection Workflow Integration System (CWIS)
7 # Copyright 2004-2013 Edward Almasy and Internet Scout Research Group
8 # http://scout.wisc.edu/cwis/
13 # ---- PUBLIC INTERFACE --------------------------------------------------
18 # call parent constructor
19 $this->
User($UserInfo);
35 # Clear all keys more than two days old
36 $DB->Query(
"DELETE FROM UsedLoginTokens WHERE NOW()-KeyCTime > 172800");
38 $DB->Query(
"LOCK TABLES LoginKeys WRITE");
39 $DB->Query(
"DELETE FROM LoginKeys WHERE NOW() - CreationTime > 172800");
41 # Get the most recently generated key
42 $DB->Query(
"SELECT NOW()-CreationTime as Age,"
43 .
"KeyPair FROM LoginKeys "
44 .
"ORDER BY Age ASC LIMIT 1");
45 $Row =
$DB->FetchRow();
47 # If there is no key in the database, or the key is too old
48 if ( ($Row===FALSE) || ($Row[
"Age"]>=86400) )
50 # Generate a new OpenSSL format keypair
51 $KeyPair = openssl_pkey_new(
53 'private_key_bits' => 512, # Make
this a Sysadmin pref later?
54 'private_key_type' => OPENSSL_KEYTYPE_RSA
57 # Serialize it for storage
58 openssl_pkey_export($KeyPair, $KeyPairDBFormat);
60 # And stick it into the database
61 $DB->Query(
"INSERT INTO LoginKeys "
62 .
"(KeyPair, CreationTime) VALUES ("
63 .
"\"".addslashes($KeyPairDBFormat).
"\","
68 # If we do have a current key in the database,
69 # Convert it to openssl format for usage
70 $KeyPair = openssl_pkey_get_private( $Row[
"KeyPair"] );
72 $DB->Query(
"UNLOCK TABLES");
86 # Export the keypair as an ASCII signing request (which contains the data we want)
87 openssl_csr_export(openssl_csr_new(array(), $KeyPair), $Export, FALSE);
94 '/Modulus \([0-9]+ bit\):(.*)Exponent: [0-9]+ \(0x([0-9a-f]+)\)/ms',
95 '/Public-Key: \([0-9]+ bit\).*Modulus:(.*)Exponent: [0-9]+ \(0x([0-9a-f]+)\)/ms',
99 foreach ($Patterns as $Pattern)
101 if (preg_match($Pattern, $Export, $Matches))
103 $Modulus = $Matches[1];
104 $Exponent = $Matches[2];
109 # Clean newlines and whitespace out of the modulus
110 $Modulus = preg_replace(
"/[^0-9a-f]/",
"", $Modulus);
112 # Return key material
113 return array(
"Modulus" => $Modulus,
"Exponent" => $Exponent );
SQL database abstraction object with smart query caching.
static ExtractPubKeyParameters($KeyPair)
Extract the modulus and exponent of the public key from an OpenSSL format keypair to send in login fo...
User($UserInfoOne=NULL, $UserInfoTwo=NULL)
__construct($UserInfo=NULL)
static GetCryptKey()
Get/generate a cryptographic keypair for user login.
CWIS-specific user class.