summaryrefslogtreecommitdiffstats
path: root/ldap/synctools/passwordsync/passhand.cpp
diff options
context:
space:
mode:
authorNathan Kinder <nkinder@redhat.com>2006-08-28 18:17:26 +0000
committerNathan Kinder <nkinder@redhat.com>2006-08-28 18:17:26 +0000
commit9cc92a20535293b4fd9be90e626d5daccc5d923e (patch)
treef74baed88b15d6d1206fa4b24c5821516b2b2346 /ldap/synctools/passwordsync/passhand.cpp
parent2f59fa4c73e006af32a402dac503635188a017b4 (diff)
downloadds-9cc92a20535293b4fd9be90e626d5daccc5d923e.tar.gz
ds-9cc92a20535293b4fd9be90e626d5daccc5d923e.tar.xz
ds-9cc92a20535293b4fd9be90e626d5daccc5d923e.zip
204355 - Remove winsync code from ldapserver tree
Diffstat (limited to 'ldap/synctools/passwordsync/passhand.cpp')
-rw-r--r--ldap/synctools/passwordsync/passhand.cpp362
1 files changed, 0 insertions, 362 deletions
diff --git a/ldap/synctools/passwordsync/passhand.cpp b/ldap/synctools/passwordsync/passhand.cpp
deleted file mode 100644
index 0a489392..00000000
--- a/ldap/synctools/passwordsync/passhand.cpp
+++ /dev/null
@@ -1,362 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- *
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- *
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception.
- *
- *
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-// Created: 2-8-2005
-// Author(s): Scott Bridges
-#include "passhand.h"
-#include <time.h>
-
-#define KEY {0xe8, 0xa7, 0x7c, 0xe2, 0x05, 0x63, 0x6a, 0x31}
-#define IV {0xe4, 0xbb, 0x3b, 0xd3, 0xc3, 0x71, 0x2e, 0x58}
-
-void timeStamp(fstream* outFile)
-{
- if(outFile->is_open())
- {
- char dateBuf[32];
- char timeBuf[32];
-
- _strdate(dateBuf);
- _strtime(timeBuf);
- *outFile << dateBuf << " " << timeBuf << ": ";
- }
-}
-
-int saveSet(PASS_INFO_LIST* passInfoList, char* filename)
-{
- int result = 0;
- fstream outFile;
- PASS_INFO_LIST_ITERATOR currentPair;
- strstream plainTextStream;
- char* cipherTextBuf;
- int usernameLen;
- int passwordLen;
- int plainTextLen;
- int cipherTextLen;
- int resultTextLen = 0;
- int pairCount = passInfoList->size();
-
- // Write usernames and passwords to a strstream
- plainTextStream.write((char*)&pairCount, sizeof(pairCount));
- for(currentPair = passInfoList->begin(); currentPair != passInfoList->end(); currentPair++)
- {
- // Usernames
- usernameLen = strlen(currentPair->username) + 1;
- plainTextStream.write((char*)&usernameLen, sizeof(usernameLen));
- plainTextStream.write(currentPair->username, usernameLen);
-
- // Passwords
- passwordLen = strlen(currentPair->password) + 1;
- plainTextStream.write((char*)&passwordLen, sizeof(passwordLen));
- plainTextStream.write(currentPair->password, passwordLen);
- }
-
-
- plainTextLen = plainTextStream.tellp() - plainTextStream.tellg();
- // cipherTextBuf length must be at least plainTextLen + 8
- cipherTextLen = plainTextLen + 8;
-
- cipherTextBuf = (char*)malloc(cipherTextLen);
-
- if(encrypt(plainTextStream.str(), plainTextLen, cipherTextBuf, cipherTextLen, &resultTextLen) != 0)
- {
- result = -1;
- goto exit;
- }
-
- // Write cipher text to file
- outFile.open(filename, ios::out | ios::binary);
- if(!outFile.is_open())
- {
- result = -1;
- goto exit;
- }
- outFile.write(cipherTextBuf, resultTextLen);
- outFile.close();
-
-exit:
- return result;
-}
-
-int loadSet(PASS_INFO_LIST* passInfoList, char* filename)
-{
- int result = 0;
- int i;
- fstream inFile;
- PASS_INFO newPair;
- strstream* plainTextStream;
- char* cipherTextBuf;
- char* plainTextBuf;
- int usernameLen;
- int passwordLen;
- int plainTextLen;
- int cipherTextLen;
- int resultTextLen = 0;
- int pairCount;
-
- // Read in cipher text from file
- inFile.open(filename, ios::in | ios::binary);
- if(!inFile.is_open())
- {
- result = -1;
- goto exit;
- }
- // Determine file size
- inFile.seekg(0, ios::end);
- cipherTextLen = inFile.tellg();
- inFile.seekg(0, ios::beg);
- // plainTextLen length must be at least cipherTextLen
- plainTextLen = cipherTextLen;
-
- cipherTextBuf = (char*)malloc(cipherTextLen);
- plainTextBuf = (char*)malloc(plainTextLen);
-
- inFile.read(cipherTextBuf, cipherTextLen);
- inFile.close();
-
- if(decrypt(cipherTextBuf, cipherTextLen, plainTextBuf, plainTextLen, &resultTextLen) != 0)
- {
- result = -1;
- goto exit;
- }
-
- plainTextStream = new strstream(plainTextBuf, resultTextLen);
-
- plainTextStream->read((char*)&pairCount, sizeof(pairCount));
-
- // Read usernames and passwords from a strstream
- for(i = 0; i < pairCount; i++)
- {
- // Username
- plainTextStream->read((char*)&usernameLen, sizeof(usernameLen));
- newPair.username = (char*)malloc(usernameLen);
- plainTextStream->read((char*)newPair.username, usernameLen);
-
- // Password
- plainTextStream->read((char*)&passwordLen, sizeof(passwordLen));
- newPair.password = (char*)malloc(passwordLen);
- plainTextStream->read((char*)newPair.password, passwordLen);
-
- // Backoff
- newPair.backoffCount = 0;
-
- // Load time
- time(&newPair.atTime);
-
- passInfoList->push_back(newPair);
- }
-
- delete plainTextStream;
-
-exit:
- return result;
-}
-
-int clearSet(PASS_INFO_LIST* passInfoList)
-{
- // ToDo: zero out memory
-
- passInfoList->clear();
-
- return -1;
-}
-
-int encrypt(char* plainTextBuf, int plainTextLen, char* cipherTextBuf, int cipherTextLen, int* resultTextLen)
-{
- int result = 0;
- SECStatus rv1, rv2, rv3;
- PK11SlotInfo* slot = NULL;
- PK11SymKey* SymKey = NULL;
- SECItem* SecParam = NULL;
- PK11Context* EncContext = NULL;
- unsigned char gKey[] = KEY;
- unsigned char gIV[] = IV;
- PK11SymKey* key = NULL;
- SECItem keyItem;
- SECItem ivItem;
- CK_MECHANISM_TYPE cipherMech = CKM_DES_CBC_PAD;
- int offset;
- int tempTextLen;
-
- // Initialize NSS
- rv1 = NSS_NoDB_Init(".");
- if(rv1 != SECSuccess)
- {
- result = PR_GetError();
- goto exit;
- }
-
- // Get a key slot
- slot = PK11_GetInternalKeySlot();
- if(slot == NULL)
- {
- result = PR_GetError();
- goto exit;
- }
-
- // Generate a symmetric key
- keyItem.data = gKey;
- keyItem.len = sizeof(gKey);
- SymKey = PK11_ImportSymKey(slot, cipherMech, PK11_OriginUnwrap, CKA_ENCRYPT, &keyItem, NULL);
- if(SymKey == NULL)
- {
- result = PR_GetError();
- goto exit;
- }
-
- // Set up the PKCS11 encryption paramters
- ivItem.data = gIV;
- ivItem.len = sizeof(gIV);
- SecParam = PK11_ParamFromIV(cipherMech, &ivItem);
- if(SecParam == NULL)
- {
- if(SymKey != NULL)
- {
- PK11_FreeSymKey(SymKey);
- }
- result = PR_GetError();
- goto exit;
- }
-
- // ToDo: check parameters
-
-
- // Encrypt
- tempTextLen = 0;
- EncContext = PK11_CreateContextBySymKey(cipherMech, CKA_ENCRYPT, SymKey, SecParam);
- rv2 = PK11_CipherOp(EncContext, (unsigned char*)cipherTextBuf, &tempTextLen, cipherTextLen, (unsigned char*)plainTextBuf, plainTextLen);
- offset = tempTextLen;
- rv3 = PK11_DigestFinal(EncContext, (unsigned char*)cipherTextBuf + offset, (unsigned int*)&tempTextLen, cipherTextLen - offset);
- *resultTextLen = offset + tempTextLen;
-
- // Clean up
- PK11_DestroyContext(EncContext, PR_TRUE);
- PK11_FreeSymKey(SymKey);
- SECITEM_FreeItem(SecParam, PR_TRUE);
-
- if((rv2 != SECSuccess) || (rv2 != SECSuccess))
- {
- result = PR_GetError();
- goto exit;
- }
-
-exit:
- return result;
-}
-
-int decrypt(char* cipherTextBuf, int cipherTextLen, char* plainTextBuf, int plainTextLen, int* resultTextLen)
-{
- int result = 0;
- SECStatus rv1, rv2, rv3;
- PK11SlotInfo* slot = NULL;
- PK11SymKey* SymKey = NULL;
- SECItem* SecParam = NULL;
- PK11Context* EncContext = NULL;
- unsigned char gKey[] = KEY;
- unsigned char gIV[] = IV;
- PK11SymKey* key = NULL;
- SECItem keyItem;
- SECItem ivItem;
- CK_MECHANISM_TYPE cipherMech = CKM_DES_CBC_PAD;
- int offset;
- int tempTextLen;
-
- // Initialize NSS
- rv1 = NSS_NoDB_Init(".");
- if(rv1 != SECSuccess)
- {
- result = PR_GetError();
- goto exit;
- }
-
- // Get a key slot
- slot = PK11_GetInternalKeySlot();
- if(slot == NULL)
- {
- result = PR_GetError();
- goto exit;
- }
-
- // Generate a symmetric key
- keyItem.data = gKey;
- keyItem.len = sizeof(gKey);
- SymKey = PK11_ImportSymKey(slot, cipherMech, PK11_OriginUnwrap, CKA_ENCRYPT, &keyItem, NULL);
- if(SymKey == NULL)
- {
- result = PR_GetError();
- goto exit;
- }
-
- // Set up the PKCS11 encryption paramters
- ivItem.data = gIV;
- ivItem.len = sizeof(gIV);
- SecParam = PK11_ParamFromIV(cipherMech, &ivItem);
- if(SecParam == NULL)
- {
- if(SymKey != NULL)
- {
- PK11_FreeSymKey(SymKey);
- }
- result = PR_GetError();
- goto exit;
- }
-
- // ToDo: check parameters
-
-
- // Decrypt
- tempTextLen = 0;
- EncContext = PK11_CreateContextBySymKey(cipherMech, CKA_DECRYPT, SymKey, SecParam);
- rv2 = PK11_CipherOp(EncContext, (unsigned char*)plainTextBuf, &tempTextLen, plainTextLen, (unsigned char*)cipherTextBuf, cipherTextLen);
- offset = tempTextLen;
- rv3 = PK11_DigestFinal(EncContext, (unsigned char*)plainTextBuf + offset, (unsigned int*)&tempTextLen, plainTextLen - offset);
- *resultTextLen = offset + tempTextLen;
-
- // Clean up
- PK11_DestroyContext(EncContext, PR_TRUE);
- PK11_FreeSymKey(SymKey);
- SECITEM_FreeItem(SecParam, PR_TRUE);
-
- if((rv2 != SECSuccess) || (rv2 != SECSuccess))
- {
- result = PR_GetError();
- goto exit;
- }
-
-exit:
- return result;
-}