From abf3adcd2f37f4e278fc9ef7634ca0c8f5171893 Mon Sep 17 00:00:00 2001 From: kavsrf Date: Sun, 5 Feb 2017 17:31:28 +0300 Subject: picture password bmp and DcsProp can be in secregion on separate flash Tables overlay configuration commands --- Library/CommonLib/GptRead.c | 157 +++++++++++++++++++++++++++++++++- Library/DcsCfgLib/GptEdit.c | 133 ++++++++++++++++++++++++++++ Library/PasswordLib/PicturePassword.c | 10 +-- Library/PasswordLib/PlatformID.c | 86 +++++++++++++++++++ Library/VeraCryptLib/DcsConfig.c | 4 +- Library/VeraCryptLib/DcsConfig.h | 2 + Library/VeraCryptLib/DcsVeraCrypt.c | 30 ++++--- 7 files changed, 399 insertions(+), 23 deletions(-) (limited to 'Library') diff --git a/Library/CommonLib/GptRead.c b/Library/CommonLib/GptRead.c index 0eab963..9267531 100644 --- a/Library/CommonLib/GptRead.c +++ b/Library/CommonLib/GptRead.c @@ -60,14 +60,11 @@ GptHeaderCheckCrcAltSize( Hdr->CRC32 = 0; Status = gBS->CalculateCrc32((UINT8 *)Hdr, Size, &Crc); + Hdr->CRC32 = OrgCrc; if (EFI_ERROR(Status)) { return FALSE; } - // // set results - // - Hdr->CRC32 = OrgCrc; - return (BOOLEAN)(OrgCrc == Crc); } @@ -213,3 +210,155 @@ GptReadHeader( *PartHeader = PartHdr; return EFI_SUCCESS; } + +////////////////////////////////////////////////////////////////////////// +// General EFI tables +////////////////////////////////////////////////////////////////////////// + +BOOLEAN +TablesVerify( + IN UINTN maxSize, + IN VOID* tables) +{ + EFI_TABLE_HEADER *mhdr = (EFI_TABLE_HEADER *)tables; + if (tables != NULL && + mhdr->Signature == EFITABLE_HEADER_SIGN && + GptHeaderCheckCrc(maxSize, mhdr)) { + UINT8* raw = (UINT8*)tables; + UINTN rawSize = mhdr->HeaderSize; + UINTN tpos = sizeof(EFI_TABLE_HEADER); + while (tpos < rawSize) { + EFI_TABLE_HEADER *hdr = (EFI_TABLE_HEADER *)(raw + tpos); + if (!GptHeaderCheckCrc(rawSize - tpos, hdr)) { + return FALSE; // wrong crc + } + tpos += hdr->HeaderSize; + } + return TRUE; + } + return FALSE; +} + +BOOLEAN +TablesGetData( + IN VOID* tables, + IN UINT64 sign, + OUT VOID** data, + OUT UINTN* size) +{ + EFI_TABLE_HEADER *mhdr = (EFI_TABLE_HEADER *)tables; + if (tables != NULL && + mhdr->Signature == EFITABLE_HEADER_SIGN && + GptHeaderCheckCrc(0, mhdr)) { + UINT8* raw = (UINT8*)tables; + UINTN rawSize = mhdr->HeaderSize; + UINTN tpos = sizeof(EFI_TABLE_HEADER); + while (tpos < rawSize) { + EFI_TABLE_HEADER *hdr = (EFI_TABLE_HEADER *)(raw + tpos); + if (GptHeaderCheckCrc(rawSize - tpos, hdr)) { + if (hdr->Signature == sign) { + *data = raw + tpos + sizeof(EFI_TABLE_HEADER); + *size = hdr->HeaderSize - sizeof(EFI_TABLE_HEADER); + return TRUE; + } + tpos += hdr->HeaderSize; + } + else { + return FALSE; + } + } + } + return FALSE; +} + +BOOLEAN +TablesDelete( + IN VOID* tables, + IN UINT64 sign + ) +{ + EFI_TABLE_HEADER *mhdr = (EFI_TABLE_HEADER *)tables; + EFI_TABLE_HEADER *thdr = NULL; + UINT8* raw = (UINT8*)tables; + UINTN rawSize = mhdr->HeaderSize; + UINTN tpos = sizeof(EFI_TABLE_HEADER); + if (tables != NULL && + mhdr->Signature == EFITABLE_HEADER_SIGN && + GptHeaderCheckCrc(0, mhdr)) { + while (tpos < rawSize) { + EFI_TABLE_HEADER *hdr = (EFI_TABLE_HEADER *)(raw + tpos); + if (GptHeaderCheckCrc(rawSize - tpos, hdr)) { + if (hdr->Signature == sign) { + thdr = hdr; + break; + } + tpos += hdr->HeaderSize; + } else { + return FALSE; + } + } + if (thdr != NULL) { + UINT32 Crc; + UINTN pos; + mhdr->HeaderSize -= thdr->HeaderSize; + pos = tpos + thdr->HeaderSize; + while (pos < rawSize) { + raw[tpos] = raw[pos]; + ++tpos; + ++pos; + } + mhdr->CRC32 = 0; + if (EFI_ERROR(gBS->CalculateCrc32((UINT8 *)raw, mhdr->HeaderSize, &Crc))) { + return FALSE; + } + mhdr->CRC32 = Crc; + return TRUE; + } + } + return FALSE; +} + +BOOLEAN +TablesAppend( + IN OUT VOID** tables, + IN UINT64 sign, + IN VOID* data, + IN UINTN size) +{ + EFI_TABLE_HEADER *mhdr = NULL; + EFI_TABLE_HEADER *thdr = NULL; + UINTN rawSize = 0; + UINT8* raw = (UINT8*)tables; + if (tables != NULL && + (mhdr = (EFI_TABLE_HEADER *)*tables) != NULL && + mhdr->Signature == EFITABLE_HEADER_SIGN && + GptHeaderCheckCrc(0, mhdr)) { + UINT32 Crc; + rawSize = mhdr->HeaderSize; + raw = MEM_REALLOC(rawSize, rawSize + sizeof(EFI_TABLE_HEADER) + size, mhdr); + if (raw == NULL) { + return FALSE; + } + mhdr = (EFI_TABLE_HEADER *)raw; + thdr = (EFI_TABLE_HEADER *)(raw + rawSize); + thdr->HeaderSize = (UINT32)(sizeof(EFI_TABLE_HEADER) + size); + thdr->Signature = sign; + CopyMem(((UINT8 *)thdr) + sizeof(EFI_TABLE_HEADER), data, size); + + thdr->CRC32 = 0; + if (EFI_ERROR(gBS->CalculateCrc32((UINT8 *)thdr, thdr->HeaderSize, &Crc))) { + return FALSE; + } + thdr->CRC32 = Crc; + + mhdr->HeaderSize += (UINT32)(size + sizeof(EFI_TABLE_HEADER)); + mhdr->CRC32 = 0; + if (EFI_ERROR(gBS->CalculateCrc32((UINT8 *)raw, mhdr->HeaderSize, &Crc))) { + return FALSE; + } + mhdr->CRC32 = Crc; + *tables = raw; + return TRUE; + } + return FALSE; +} diff --git a/Library/DcsCfgLib/GptEdit.c b/Library/DcsCfgLib/GptEdit.c index e1d6d2a..d486909 100644 --- a/Library/DcsCfgLib/GptEdit.c +++ b/Library/DcsCfgLib/GptEdit.c @@ -745,3 +745,136 @@ DeListRndLoad() } return res; } + +////////////////////////////////////////////////////////////////////////// +// Tables +////////////////////////////////////////////////////////////////////////// + +CONST CHAR16* DcsTablesFileName = L"DcsTables"; +UINT8* gDcsTables = NULL; +UINTN gDcsTablesSize = 0; + +BOOLEAN +TablesList( + IN UINTN maxSize, + IN VOID* tables + ) { + EFI_TABLE_HEADER *mhdr = (EFI_TABLE_HEADER *)tables; + if (tables != NULL && + mhdr->Signature == EFITABLE_HEADER_SIGN && + GptHeaderCheckCrc(maxSize, mhdr)) { + UINT8* raw = (UINT8*)tables; + UINTN rawSize = mhdr->HeaderSize; + UINTN tpos = sizeof(EFI_TABLE_HEADER); + while (tpos < rawSize) { + EFI_TABLE_HEADER *hdr = (EFI_TABLE_HEADER *)(raw + tpos); + CHAR8 asc_sign[sizeof(hdr->Signature) + 1] = { 0 }; + CopyMem(asc_sign, &hdr->Signature, sizeof(hdr->Signature)); + asc_sign[sizeof(hdr->Signature)] = 0; + OUT_PRINT(L"%a, SZ=%d", asc_sign, hdr->HeaderSize); + if (!GptHeaderCheckCrc(rawSize - tpos, hdr)) { + ERR_PRINT(L" - wrong crc\n"); + return FALSE; // wrong crc + } + OUT_PRINT(L" - OK\n"); + tpos += hdr->HeaderSize; + } + return TRUE; + } + return FALSE; +} + +EFI_STATUS +TablesLoad() { + EFI_STATUS res = EFI_SUCCESS; + if (EFI_ERROR(FileExist(NULL, (CHAR16*)DcsTablesFileName))) { + EFI_TABLE_HEADER* mhdr = NULL; + UINT32 Crc; + gDcsTables = MEM_ALLOC(sizeof(EFI_TABLE_HEADER)); + gDcsTablesSize = sizeof(EFI_TABLE_HEADER); + mhdr = (EFI_TABLE_HEADER*)gDcsTables; + mhdr->HeaderSize = sizeof(EFI_TABLE_HEADER); + mhdr->Signature = EFITABLE_HEADER_SIGN; + mhdr->CRC32 = 0; + if (EFI_ERROR(res = gBS->CalculateCrc32((UINT8 *)gDcsTables, mhdr->HeaderSize, &Crc))) { + goto err; + } + mhdr->CRC32 = Crc; + OUT_PRINT(L"New tables created %s\n", DcsTablesFileName); + } else { + res = FileLoad(NULL, (CHAR16*)DcsTablesFileName, &gDcsTables, &gDcsTablesSize); + if (!EFI_ERROR(res)) { + res = TablesVerify(gDcsTablesSize, gDcsTables) ? EFI_SUCCESS : EFI_CRC_ERROR; + } + } +err: + if (EFI_ERROR(res)) { + ERR_PRINT(L"Tables load error %r\n", res); + } + return res; +} + +EFI_STATUS +TablesNew( + IN CONST CHAR16* signStr, + IN CONST CHAR16* dataFileName + ) { + EFI_STATUS res = EFI_SUCCESS; + VOID* data; + UINTN dataSize; + UINT64 sign; + EFI_TABLE_HEADER* mhdr; + + if (StrLen(signStr) != 8) { + res = EFI_INVALID_PARAMETER; + goto err; + } + sign = SIGNATURE_64(signStr[0], signStr[1], signStr[2], signStr[3], signStr[4], signStr[5], signStr[6], signStr[7]); + + CE(TablesLoad()); + TablesDelete(gDcsTables, sign); + CE(FileLoad(NULL, (CHAR16*)dataFileName, &data, &dataSize)); + if (!TablesAppend(&gDcsTables, sign, data, dataSize)) { + res = EFI_INVALID_PARAMETER; + goto err; + } + mhdr = (EFI_TABLE_HEADER*)gDcsTables; + gDcsTablesSize = mhdr->HeaderSize; + res = FileSave(NULL, (CHAR16*)DcsTablesFileName, mhdr, mhdr->HeaderSize); + +err: + if (EFI_ERROR(res)) { + ERR_PRINT(L"Tables append error %r\n", res); + } + return res; +} + +EFI_STATUS +TablesDel( + IN CONST CHAR16* signStr + ) { + EFI_STATUS res = EFI_SUCCESS; + UINT64 sign; + EFI_TABLE_HEADER* mhdr; + + if (StrLen(signStr) != 8) { + res = EFI_INVALID_PARAMETER; + goto err; + } + sign = SIGNATURE_64(signStr[0], signStr[1], signStr[2], signStr[3], signStr[4], signStr[5], signStr[6], signStr[7]); + + CE(TablesLoad()); + if (!TablesDelete(gDcsTables, sign)) { + res = EFI_INVALID_PARAMETER; + goto err; + } + mhdr = (EFI_TABLE_HEADER*)gDcsTables; + gDcsTablesSize = mhdr->HeaderSize; + res = FileSave(NULL, (CHAR16*)DcsTablesFileName, gDcsTables, gDcsTablesSize); + +err: + if (EFI_ERROR(res)) { + ERR_PRINT(L"Tables delete error %r\n", res); + } + return res; +} diff --git a/Library/PasswordLib/PicturePassword.c b/Library/PasswordLib/PicturePassword.c index f40b095..c3831ad 100644 --- a/Library/PasswordLib/PicturePassword.c +++ b/Library/PasswordLib/PicturePassword.c @@ -41,8 +41,8 @@ int gSCLocked = 0; // Picture password ////////////////////////////////////////////////////////////////////////// CONST CHAR16* BmpName = L"Test.bmp"; -VOID* Bmp = NULL; -UINTN BmpSize = 0; +VOID* gPictPwdBmp = NULL; +UINTN gPictPwdBmpSize = 0; BLT_HEADER* bltPwd = NULL; UINTN posPictX, posPictY; BLT_HEADER* bltScrn = NULL; @@ -196,7 +196,7 @@ DrawPwdPicture() if (bltPwd != NULL) MEM_FREE(bltPwd); - res = BmpToBlt(Bmp, BmpSize, &bltPwd); + res = BmpToBlt(gPictPwdBmp, gPictPwdBmpSize, &bltPwd); if (EFI_ERROR(res)) { return res; } @@ -287,9 +287,9 @@ AskPictPwdInt( InitSpeaker(); } - if (Bmp == NULL) { + if (gPictPwdBmp == NULL) { if (gPasswordPictureFileName != NULL) { - res = FileLoad(NULL, (CHAR16*)gPasswordPictureFileName, &Bmp, &BmpSize); + res = FileLoad(NULL, (CHAR16*)gPasswordPictureFileName, &gPictPwdBmp, &gPictPwdBmpSize); if (EFI_ERROR(res)) { ERR_PRINT(L"File load - %r\n", res); return; diff --git a/Library/PasswordLib/PlatformID.c b/Library/PasswordLib/PlatformID.c index 100b0c0..ca8188b 100644 --- a/Library/PasswordLib/PlatformID.c +++ b/Library/PasswordLib/PlatformID.c @@ -283,3 +283,89 @@ PlatformGetAuthData( return res; } +CHAR8 gDCS_platform_crt_der[1341] = { + 0x30, 0x82, 0x05, 0x39, 0x30, 0x82, 0x03, 0x21, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x32, + 0xDC, 0x46, 0x30, 0x87, 0xE5, 0x4F, 0xB1, 0x43, 0x0F, 0x58, 0x9E, 0xC0, 0xDA, 0x58, 0xF8, 0x30, + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, 0x23, + 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1E, 0x18, 0x00, 0x44, 0x00, 0x43, 0x00, + 0x53, 0x00, 0x5F, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, 0x6F, 0x00, + 0x72, 0x00, 0x6D, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x36, 0x30, 0x38, 0x30, 0x39, 0x30, 0x38, 0x33, + 0x38, 0x31, 0x31, 0x5A, 0x17, 0x0D, 0x33, 0x31, 0x30, 0x38, 0x30, 0x39, 0x30, 0x38, 0x33, 0x38, + 0x31, 0x30, 0x5A, 0x30, 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1E, 0x18, + 0x00, 0x44, 0x00, 0x43, 0x00, 0x53, 0x00, 0x5F, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0D, 0x06, 0x09, + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0F, 0x00, + 0x30, 0x82, 0x02, 0x0A, 0x02, 0x82, 0x02, 0x01, 0x00, 0xAF, 0x5B, 0x97, 0x06, 0x70, 0x4F, 0x3B, + 0x2E, 0x50, 0x6A, 0xD1, 0x47, 0xCB, 0x70, 0x20, 0xF4, 0x77, 0x79, 0x06, 0xCA, 0xA9, 0xA2, 0x13, + 0x75, 0xAD, 0x07, 0x66, 0x94, 0xC2, 0xBB, 0xCA, 0x7E, 0xFC, 0x6C, 0x19, 0x16, 0x5D, 0x60, 0x77, + 0x6E, 0xCB, 0xF3, 0x8A, 0xC2, 0xF6, 0x53, 0xC7, 0xC2, 0xB1, 0x87, 0x5F, 0x8E, 0xFA, 0x20, 0xDF, + 0xBA, 0x00, 0xCE, 0xBA, 0xA7, 0xC8, 0x65, 0x7E, 0xFC, 0xA8, 0xF8, 0x50, 0x9E, 0xD7, 0x7D, 0x8E, + 0x4F, 0xB1, 0x1B, 0x60, 0xC0, 0xD2, 0xBC, 0x4A, 0xB4, 0x46, 0xA5, 0x0E, 0x90, 0x38, 0xA5, 0x7B, + 0x58, 0xEE, 0x16, 0xD9, 0xBA, 0x73, 0xAD, 0x69, 0x2A, 0xA4, 0xB4, 0x51, 0x0C, 0x21, 0x8C, 0x3D, + 0x0E, 0x40, 0x44, 0x20, 0x2E, 0xE2, 0xEF, 0x16, 0x25, 0xE8, 0x1C, 0xE8, 0xD2, 0x76, 0x66, 0x8E, + 0xA1, 0xB8, 0x29, 0x28, 0x23, 0xA2, 0x9F, 0xCA, 0xAB, 0x0D, 0x81, 0x4A, 0xE0, 0xF9, 0x87, 0x7B, + 0xD6, 0xDA, 0x2E, 0x10, 0x21, 0xBD, 0x69, 0x9C, 0x86, 0x45, 0xD2, 0xE8, 0xCD, 0xA1, 0xF6, 0xC2, + 0x09, 0x93, 0x68, 0x06, 0xA0, 0x5D, 0xB7, 0x2C, 0xD7, 0x83, 0x0B, 0xCC, 0xFE, 0x91, 0x90, 0x1E, + 0x85, 0x96, 0x72, 0xBC, 0x3E, 0x9C, 0xD4, 0x1C, 0xDF, 0xC4, 0x85, 0xB3, 0xD7, 0x00, 0x43, 0xDD, + 0xA8, 0x7C, 0xD1, 0xDE, 0x89, 0xDB, 0x2A, 0x70, 0x27, 0x6F, 0x46, 0xF9, 0x3A, 0x9E, 0x55, 0x10, + 0x5A, 0x82, 0x42, 0x72, 0x42, 0xEA, 0x83, 0x0F, 0x39, 0x3A, 0x50, 0x67, 0xFE, 0x4F, 0x9D, 0x91, + 0x50, 0x93, 0xB3, 0xC6, 0x12, 0x60, 0xAE, 0x3A, 0x5A, 0xB7, 0xB7, 0x9C, 0x83, 0xA0, 0xD2, 0xFF, + 0xFF, 0x23, 0xC3, 0x95, 0x66, 0x79, 0x20, 0xA0, 0x09, 0x02, 0x74, 0x15, 0x34, 0x2A, 0x0A, 0x6E, + 0x80, 0x36, 0x13, 0xC7, 0x9B, 0x77, 0x81, 0x35, 0x45, 0xDD, 0xEC, 0x11, 0xC3, 0x43, 0xA6, 0x48, + 0xF8, 0xDB, 0xC0, 0x3C, 0x12, 0x86, 0x37, 0x68, 0xF4, 0xEA, 0x70, 0x41, 0x66, 0x6D, 0x56, 0x7C, + 0xFC, 0xE8, 0x61, 0xD7, 0x82, 0x02, 0xC6, 0xFD, 0xA5, 0x74, 0xCE, 0xA6, 0x39, 0xFB, 0xD2, 0x21, + 0x61, 0x15, 0x6B, 0x6E, 0x0B, 0xD6, 0x65, 0xF5, 0x8C, 0x5A, 0x52, 0x5E, 0x16, 0x96, 0x02, 0x09, + 0x81, 0x28, 0x32, 0xBF, 0x2C, 0x1E, 0x0F, 0xAD, 0x1E, 0xE5, 0xAD, 0x3B, 0x19, 0x24, 0xED, 0xC1, + 0xA7, 0x60, 0xC9, 0x2D, 0xE4, 0x15, 0xA7, 0xAF, 0x91, 0x35, 0x07, 0x5A, 0x31, 0x39, 0xB1, 0xA5, + 0x3C, 0xE3, 0x59, 0x9A, 0x85, 0xC8, 0x6F, 0x83, 0x6F, 0xFF, 0x3C, 0x81, 0xC1, 0x8F, 0xF6, 0x2E, + 0x3C, 0x1B, 0xF5, 0x9A, 0x21, 0x5D, 0xAD, 0x3A, 0x9B, 0x7F, 0x18, 0x4F, 0x62, 0x09, 0xEA, 0x2F, + 0x5D, 0x15, 0xFD, 0x9D, 0x73, 0x78, 0x95, 0x76, 0x47, 0x15, 0x1C, 0x9A, 0x3F, 0x19, 0xB7, 0xCE, + 0x03, 0x46, 0x6C, 0x61, 0xCF, 0xC4, 0xBD, 0x0D, 0x1A, 0x9F, 0xB4, 0xAA, 0x03, 0x84, 0x8D, 0x15, + 0x3E, 0x8F, 0xBA, 0x28, 0x94, 0x09, 0x35, 0x28, 0xE5, 0x15, 0xBC, 0xAF, 0x33, 0xBA, 0x67, 0xF2, + 0x06, 0x79, 0xEE, 0x50, 0x0F, 0x14, 0x98, 0xFC, 0x95, 0xEC, 0x65, 0x40, 0x88, 0xA8, 0x1A, 0x0C, + 0x10, 0x74, 0x79, 0x42, 0x3B, 0xCD, 0xE1, 0xD1, 0xAD, 0x7E, 0x29, 0x41, 0xC4, 0x39, 0x75, 0xC5, + 0xCB, 0x0F, 0xB1, 0x6F, 0x30, 0xD3, 0xAE, 0x53, 0x59, 0xD6, 0x86, 0x34, 0x31, 0x8B, 0x96, 0x82, + 0xDF, 0xA4, 0x01, 0x32, 0xB4, 0x29, 0xDC, 0x9C, 0x28, 0x53, 0x72, 0xAE, 0x96, 0x37, 0xE3, 0x65, + 0x59, 0x91, 0x84, 0x95, 0xB3, 0x2D, 0x3F, 0x84, 0x12, 0xD2, 0x52, 0x85, 0x8D, 0x85, 0xD5, 0x2E, + 0x2A, 0x3E, 0xEB, 0x0C, 0x11, 0xA4, 0x4F, 0xED, 0x29, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x69, + 0x30, 0x67, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, + 0x01, 0x01, 0xFF, 0x30, 0x54, 0x06, 0x03, 0x55, 0x1D, 0x01, 0x04, 0x4D, 0x30, 0x4B, 0x80, 0x10, + 0x8F, 0x11, 0x13, 0x21, 0xAA, 0xC0, 0xFA, 0xB1, 0x63, 0xD5, 0xE6, 0x00, 0x9B, 0x78, 0x67, 0x40, + 0xA1, 0x25, 0x30, 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1E, 0x18, 0x00, + 0x44, 0x00, 0x43, 0x00, 0x53, 0x00, 0x5F, 0x00, 0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x66, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6D, 0x82, 0x10, 0x32, 0xDC, 0x46, 0x30, 0x87, 0xE5, 0x4F, + 0xB1, 0x43, 0x0F, 0x58, 0x9E, 0xC0, 0xDA, 0x58, 0xF8, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x7D, 0x03, 0x2A, + 0x49, 0x7E, 0x0C, 0x43, 0x4E, 0xAE, 0x45, 0xDD, 0xE2, 0x62, 0xB2, 0x31, 0x55, 0xEB, 0x6C, 0xF8, + 0x96, 0xFC, 0x5A, 0x5F, 0xA7, 0xD2, 0x26, 0xA5, 0x10, 0x15, 0x85, 0x1D, 0xDE, 0xCD, 0x97, 0xFB, + 0x6D, 0x19, 0xED, 0x03, 0x93, 0x83, 0x94, 0x04, 0x1B, 0xE6, 0x00, 0xBA, 0x41, 0xCF, 0xAB, 0xB7, + 0x46, 0x17, 0x3F, 0x8E, 0x3B, 0x2D, 0xC4, 0x54, 0x67, 0x31, 0x11, 0x0D, 0xA4, 0x35, 0x1E, 0xC4, + 0x09, 0xC2, 0xCB, 0xFD, 0x19, 0x1B, 0x5B, 0x2A, 0x19, 0x6A, 0xB9, 0x72, 0x3E, 0x27, 0x8A, 0x0A, + 0xBD, 0xB4, 0x68, 0x5D, 0xA9, 0x72, 0xC7, 0x0E, 0x28, 0x06, 0xC9, 0x4C, 0xE1, 0x56, 0xEB, 0x15, + 0x16, 0xC1, 0xD2, 0x86, 0x63, 0x57, 0xB1, 0xAA, 0x01, 0xF9, 0x26, 0xBC, 0xA7, 0xED, 0x0D, 0x02, + 0x80, 0xA7, 0x77, 0x57, 0xE9, 0xA5, 0x3B, 0x72, 0xC2, 0xAA, 0x6D, 0x7B, 0xA8, 0x40, 0xA3, 0x34, + 0x7B, 0x73, 0x40, 0x90, 0xFC, 0x43, 0x00, 0x29, 0x97, 0x7C, 0x41, 0xB2, 0xCA, 0x31, 0xA7, 0x86, + 0x08, 0xDF, 0x67, 0xCA, 0x1B, 0xEC, 0x0C, 0x53, 0xD4, 0x0B, 0x4A, 0x22, 0x40, 0x44, 0xA8, 0xE9, + 0x9D, 0x49, 0x01, 0xC6, 0x77, 0x15, 0x6E, 0x8A, 0x1F, 0xFF, 0x42, 0xF3, 0xDE, 0xF7, 0x93, 0xFA, + 0x81, 0x8F, 0x98, 0x6B, 0x75, 0x27, 0xA8, 0xBE, 0xE9, 0x2C, 0x70, 0x0F, 0xE6, 0xA5, 0xDD, 0x5D, + 0xA5, 0x33, 0x54, 0xEE, 0xFE, 0x6F, 0x91, 0xE8, 0xB4, 0x1A, 0x55, 0x77, 0xA1, 0x98, 0x56, 0x48, + 0x9C, 0xF2, 0xA3, 0x96, 0xD7, 0xB2, 0x86, 0x15, 0xA9, 0xCA, 0xBD, 0x04, 0x1B, 0x14, 0x11, 0xBE, + 0x5D, 0xC5, 0x2C, 0x5E, 0x5B, 0x57, 0x87, 0x9B, 0xCA, 0xE8, 0xA1, 0x7F, 0x6D, 0xED, 0x79, 0x2D, + 0x89, 0x3E, 0x70, 0x3C, 0x9E, 0x5C, 0x0F, 0x26, 0xCD, 0x2D, 0xE3, 0x47, 0x6E, 0x89, 0x05, 0x5C, + 0x73, 0x03, 0x87, 0x8C, 0x44, 0xE5, 0xC5, 0x6C, 0x09, 0x8B, 0x93, 0xBC, 0x1E, 0x0F, 0x56, 0x80, + 0x45, 0xDD, 0xDA, 0x96, 0x01, 0x48, 0x7C, 0xD2, 0xC0, 0x86, 0xD1, 0x8D, 0x7C, 0xBF, 0x48, 0x74, + 0x97, 0x8F, 0x4A, 0xBE, 0xC2, 0x71, 0x29, 0x91, 0xCF, 0x6A, 0x39, 0xBE, 0xD8, 0x50, 0x75, 0xCF, + 0x24, 0x8D, 0x5A, 0x12, 0x16, 0xA8, 0x5C, 0x6C, 0x88, 0x3E, 0x9F, 0x38, 0xDE, 0x04, 0x7F, 0x89, + 0xE7, 0x5A, 0x36, 0x6D, 0xAB, 0xF3, 0xC8, 0x32, 0x64, 0x91, 0x95, 0x12, 0x69, 0x7E, 0x71, 0x09, + 0xD1, 0xDA, 0xC9, 0x5E, 0xFC, 0xF4, 0x6C, 0x38, 0x71, 0x21, 0x62, 0x50, 0xC8, 0x14, 0x47, 0x25, + 0x94, 0x67, 0xD2, 0x20, 0x45, 0xC3, 0x50, 0x43, 0x81, 0x1D, 0x56, 0xAC, 0x2A, 0x02, 0x6E, 0x6D, + 0x06, 0xCA, 0x42, 0xC9, 0x65, 0x4C, 0xF7, 0x94, 0xF7, 0x67, 0x9C, 0x24, 0x98, 0x20, 0x55, 0x6A, + 0x0D, 0x85, 0x47, 0x2F, 0x3D, 0xFC, 0xA1, 0x28, 0xFE, 0xDF, 0x6F, 0xB1, 0x31, 0x62, 0x22, 0x8F, + 0x74, 0x3E, 0x1C, 0xE0, 0x02, 0xEF, 0xF9, 0x6B, 0x10, 0x32, 0xC5, 0xF5, 0x08, 0x51, 0xC7, 0x23, + 0xE7, 0x53, 0xEA, 0x89, 0x3A, 0xB2, 0xD9, 0x8A, 0x5E, 0xB0, 0x35, 0x06, 0x0A, 0x4F, 0xEE, 0x48, + 0x79, 0x7A, 0xEE, 0xEE, 0xAF, 0x9D, 0xF6, 0x59, 0xD6, 0x25, 0x86, 0xAC, 0x05, 0x9D, 0xA7, 0x61, + 0x31, 0xE3, 0xC1, 0xD0, 0x78, 0x9F, 0x83, 0x1F, 0x7C, 0x17, 0x50, 0x05, 0xAD, 0x40, 0x1A, 0x0C, + 0x19, 0x9E, 0xE1, 0x5D, 0x83, 0xE2, 0xAB, 0x83, 0x17, 0x84, 0x13, 0x76, 0x4F, 0x29, 0xBC, 0xA6, + 0x3F, 0xAE, 0x0D, 0xF9, 0x79, 0x11, 0xF8, 0x04, 0x79, 0x94, 0x88, 0x3F, 0x0D, 0x6C, 0x1F, 0x07, + 0x61, 0xF6, 0x51, 0xB2, 0xBC, 0xB8, 0xD3, 0x87, 0xA7, 0x15, 0x12, 0x60, 0x7B +}; \ No newline at end of file diff --git a/Library/VeraCryptLib/DcsConfig.c b/Library/VeraCryptLib/DcsConfig.c index 00aa5f8..e29e767 100644 --- a/Library/VeraCryptLib/DcsConfig.c +++ b/Library/VeraCryptLib/DcsConfig.c @@ -23,6 +23,8 @@ https://opensource.org/licenses/Apache-2.0 ////////////////////////////////////////////////////////////////////////// char *gConfigBuffer = NULL; UINTN gConfigBufferSize = 0; +char *gConfigBufferUpdated = NULL; +UINTN gConfigBufferUpdatedSize = 0; BOOLEAN ConfigRead(char *configKey, char *configValue, int maxValueSize) @@ -35,7 +37,7 @@ ConfigRead(char *configKey, char *configValue, int maxValueSize) } } - xml = gConfigBuffer; + xml = gConfigBufferUpdated != NULL? gConfigBufferUpdated : gConfigBuffer; if (xml != NULL) { xml = XmlFindElementByAttributeValue(xml, "config", "key", configKey); diff --git a/Library/VeraCryptLib/DcsConfig.h b/Library/VeraCryptLib/DcsConfig.h index 04719d9..cc803ce 100644 --- a/Library/VeraCryptLib/DcsConfig.h +++ b/Library/VeraCryptLib/DcsConfig.h @@ -22,6 +22,8 @@ https://opensource.org/licenses/Apache-2.0 ////////////////////////////////////////////////////////////////////////// extern char *gConfigBuffer; extern UINTN gConfigBufferSize; +extern char *gConfigBufferUpdated; +extern UINTN gConfigBufferUpdatedSize; BOOLEAN ConfigRead(char *configKey, char *configValue, int maxValueSize); int ConfigReadInt(char *configKey, int defaultValue); diff --git a/Library/VeraCryptLib/DcsVeraCrypt.c b/Library/VeraCryptLib/DcsVeraCrypt.c index cc85f4e..f4a1e27 100644 --- a/Library/VeraCryptLib/DcsVeraCrypt.c +++ b/Library/VeraCryptLib/DcsVeraCrypt.c @@ -85,6 +85,10 @@ CHAR8* gOnExitNotFound = NULL; // Authorize ///////////////////////////////////////////////////////////////////////// +#define VCCONFIG_ALLOC(data, size) \ + if(data == NULL) MEM_FREE(data); \ + data = MEM_ALLOC(size); + VOID VCAuthLoadConfig() { @@ -96,30 +100,30 @@ VCAuthLoadConfig() SetMem(&gAuthPassword, sizeof(gAuthPassword), 0); strTemp = MEM_ALLOC(MAX_MSG); - gPasswordPictureFileName = MEM_ALLOC(MAX_MSG * 2); + VCCONFIG_ALLOC(gPasswordPictureFileName, MAX_MSG * 2); ConfigReadString("PasswordPicture", "\\EFI\\VeraCrypt\\login.bmp", strTemp, MAX_MSG); AsciiStrToUnicodeStr(strTemp, gPasswordPictureFileName); MEM_FREE(strTemp); - gPasswordPictureChars = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gPasswordPictureChars, MAX_MSG); ConfigReadString("PictureChars", gPasswordPictureCharsDefault, gPasswordPictureChars, MAX_MSG); gPasswordPictureCharsLen = strlen(gPasswordPictureChars); gAuthPasswordType = ConfigReadInt("PasswordType", 0); - gAuthPasswordMsg = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gAuthPasswordMsg, MAX_MSG); ConfigReadString("PasswordMsg", "Password:", gAuthPasswordMsg, MAX_MSG); gAutoLogin = (UINT8)ConfigReadInt("AutoLogin", 0); - gAutoPassword = MEM_ALLOC(MAX_PASSWORD); + VCCONFIG_ALLOC(gAutoPassword, MAX_PASSWORD); ConfigReadString("AutoPassword", "", gAutoPassword, MAX_PASSWORD); - gAuthPimMsg = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gAuthPimMsg, MAX_MSG); gAuthPimRqt = ConfigReadInt("PimRqt", 1); gAuthPim = ConfigReadInt("Pim", 0); ConfigReadString("PimMsg", "Pim:", gAuthPimMsg, MAX_MSG); - gAuthHashMsg = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gAuthHashMsg, MAX_MSG); gAuthHashRqt = ConfigReadInt("HashRqt", 1); gAuthHash = ConfigReadInt("Hash", 0); @@ -145,15 +149,15 @@ VCAuthLoadConfig() gDcsBootForce = ConfigReadInt("DcsBootForce", 1); // Ask password even if no USB marked found. - gForcePasswordMsg = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gForcePasswordMsg, MAX_MSG); ConfigReadString("ForcePasswordMsg", gAuthPasswordMsg, gForcePasswordMsg, MAX_MSG); gForcePasswordType = ConfigReadInt("ForcePasswordType", gAuthPasswordType); gForcePasswordProgress = (UINT8)ConfigReadInt("ForcePasswordProgress", gPasswordProgress); gAuthRetry = ConfigReadInt("AuthorizeRetry", 10); - gAuthStartMsg = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gAuthStartMsg, MAX_MSG); ConfigReadString("AuthStartMsg", "Authorizing...\n\r", gAuthStartMsg, MAX_MSG); - gAuthErrorMsg = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gAuthErrorMsg, MAX_MSG); ConfigReadString("AuthErrorMsg", "Authorization failed. Wrong password, PIM or hash.\n\r", gAuthErrorMsg, MAX_MSG); gRUD = ConfigReadInt("RUD", 0); @@ -166,11 +170,11 @@ VCAuthLoadConfig() gSCLocked = ConfigReadInt("SCLocked", 0); // Actions for DcsInt - gOnExitSuccess = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gOnExitSuccess, MAX_MSG); ConfigReadString("ActionSuccess", "Exit", gOnExitSuccess, MAX_MSG); - gOnExitNotFound = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gOnExitNotFound, MAX_MSG); ConfigReadString("ActionNotFound", "Exit", gOnExitNotFound, MAX_MSG); - gOnExitFailed = MEM_ALLOC(MAX_MSG); + VCCONFIG_ALLOC(gOnExitFailed, MAX_MSG); ConfigReadString("ActionFailed", "Exit", gOnExitFailed, MAX_MSG); strTemp = MEM_ALLOC(MAX_MSG); @@ -178,7 +182,7 @@ VCAuthLoadConfig() if (strTemp[0] != 0) { EFI_GUID g; if (AsciiStrToGuid(&g, strTemp)) { - gPartitionGuidOS = MEM_ALLOC(sizeof(EFI_GUID)); + VCCONFIG_ALLOC(gPartitionGuidOS, sizeof(EFI_GUID)); if (gPartitionGuidOS != NULL) { memcpy(gPartitionGuidOS, &g, sizeof(g)); } -- cgit v1.2.3