parent
0a90d5455c
commit
2b17532f05
@ -0,0 +1,138 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
<ItemGroup Label="ProjectConfigurations"> |
||||
<ProjectConfiguration Include="Debug|Win32"> |
||||
<Configuration>Debug</Configuration> |
||||
<Platform>Win32</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Release|Win32"> |
||||
<Configuration>Release</Configuration> |
||||
<Platform>Win32</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Debug|x64"> |
||||
<Configuration>Debug</Configuration> |
||||
<Platform>x64</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Release|x64"> |
||||
<Configuration>Release</Configuration> |
||||
<Platform>x64</Platform> |
||||
</ProjectConfiguration> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ClCompile Include="main.c" /> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ClInclude Include="DSA.h" /> |
||||
</ItemGroup> |
||||
<PropertyGroup Label="Globals"> |
||||
<VCProjectVersion>16.0</VCProjectVersion> |
||||
<Keyword>Win32Proj</Keyword> |
||||
<ProjectGuid>{4f23ba48-5e70-4fbb-a131-26176c695776}</ProjectGuid> |
||||
<RootNamespace>SW05SHA1</RootNamespace> |
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
||||
</PropertyGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> |
||||
<ConfigurationType>Application</ConfigurationType> |
||||
<UseDebugLibraries>true</UseDebugLibraries> |
||||
<PlatformToolset>v143</PlatformToolset> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> |
||||
<ConfigurationType>Application</ConfigurationType> |
||||
<UseDebugLibraries>false</UseDebugLibraries> |
||||
<PlatformToolset>v143</PlatformToolset> |
||||
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
||||
<ConfigurationType>Application</ConfigurationType> |
||||
<UseDebugLibraries>true</UseDebugLibraries> |
||||
<PlatformToolset>v143</PlatformToolset> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
||||
<ConfigurationType>Application</ConfigurationType> |
||||
<UseDebugLibraries>false</UseDebugLibraries> |
||||
<PlatformToolset>v143</PlatformToolset> |
||||
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||
<ImportGroup Label="ExtensionSettings"> |
||||
</ImportGroup> |
||||
<ImportGroup Label="Shared"> |
||||
</ImportGroup> |
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||
</ImportGroup> |
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||
</ImportGroup> |
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||
</ImportGroup> |
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||
</ImportGroup> |
||||
<PropertyGroup Label="UserMacros" /> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||
<ClCompile> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<SDLCheck>true</SDLCheck> |
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<ConformanceMode>true</ConformanceMode> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||
<ClCompile> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<ConformanceMode>true</ConformanceMode> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||
<OptimizeReferences>true</OptimizeReferences> |
||||
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||
<ClCompile> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<SDLCheck>true</SDLCheck> |
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<ConformanceMode>true</ConformanceMode> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||
<ClCompile> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<ConformanceMode>true</ConformanceMode> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||
<OptimizeReferences>true</OptimizeReferences> |
||||
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||
<ImportGroup Label="ExtensionTargets"> |
||||
</ImportGroup> |
||||
</Project> |
||||
@ -0,0 +1,121 @@ |
||||
/**
|
||||
*--------------------------------------------------------------------\n |
||||
* HSLU T&A Hochschule Luzern Technik+Architektur \n |
||||
*--------------------------------------------------------------------\n |
||||
* |
||||
* \brief ASYD assignment crypto 05 |
||||
* \file |
||||
* \author Basil Estermann, basil.estermann@stud.hslu.ch |
||||
* Simon Frei, simon.frei@stud.hslu.ch |
||||
* Jonas Arnold, jonas.arnold@stud.hslu.ch |
||||
* \date 23.03.2023 |
||||
* |
||||
*-------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#include <stdint.h> |
||||
#include <stdlib.h> |
||||
#include <stdio.h> |
||||
#include <string.h> |
||||
#include <stdint.h> |
||||
|
||||
#define VALUE_LENGTH 32 |
||||
#define MESSAGE_DIGEST_LENGTH 160 |
||||
#define BLOCK_LENGTH (512/8) |
||||
#define INPUT_MESSAGE ("Testnachricht 123") |
||||
|
||||
#pragma region SHA1-Constants |
||||
#define H0 0x67452301 |
||||
#define H1 0xEFCDAB89 |
||||
#define H2 0x98BADCFE |
||||
#define H3 0x10325476 |
||||
#define H4 0xC3D2E1F0 |
||||
#pragma endregion |
||||
|
||||
void printBits(size_t const size, void const* const ptr); |
||||
uint32_t leftRotate(uint32_t n, uint32_t d); |
||||
|
||||
void main(void) { |
||||
|
||||
int result = 0; |
||||
|
||||
printf("------ Set initial hash value ------\n\n"); |
||||
#pragma region Initial Hash values |
||||
uint32_t h0, h1, h2, h3, h4; |
||||
h0 = H0; |
||||
h1 = H1; |
||||
h2 = H2; |
||||
h3 = H3; |
||||
h4 = H4; |
||||
#pragma endregion |
||||
|
||||
if (sizeof(INPUT_MESSAGE) * 8 > 447) { |
||||
printf("Message too long!"); |
||||
return 1000002; |
||||
} |
||||
|
||||
printf("------ Padding message ------\n\n"); |
||||
#pragma region Padding |
||||
unsigned char messageNoPadding[] = INPUT_MESSAGE; |
||||
printf("Size of message without padding: %i bits\n", sizeof(INPUT_MESSAGE) * 8); |
||||
printf("Message without padding\n"); |
||||
printBits(sizeof(messageNoPadding), &messageNoPadding); |
||||
unsigned char message[BLOCK_LENGTH] = ""; |
||||
// fill in message
|
||||
for (uint32_t i = 0; i < sizeof(INPUT_MESSAGE); i++) |
||||
{ |
||||
message[i] = INPUT_MESSAGE[i]; |
||||
} |
||||
// set bit
|
||||
message[sizeof(INPUT_MESSAGE)] = 0b10000000; |
||||
printf("\nMessage after adding 1: \n"); |
||||
printBits(sizeof(message), &message); |
||||
message[BLOCK_LENGTH - 1] = sizeof(INPUT_MESSAGE) * 8; |
||||
printf("\nMessage after length 1: \n"); |
||||
printBits(sizeof(message), &message); |
||||
#pragma endregion |
||||
|
||||
printf("------ Message scheduling ------\n\n"); |
||||
#pragma region Message scheduling |
||||
uint32_t WordArray[80] = { 0 }; |
||||
for (uint32_t i = 0; i < 16; i++) { |
||||
uint32_t currentbyte = message[i] << 24; |
||||
uint32_t tmp = (uint32_t)(((uint8_t)(message[i * 4]) << 24) + ((uint8_t)(message[4 * i + 1]) << 16) + ((uint8_t)(message[4 * i + 2]) << 8) + (uint8_t)(message[4 * i + 3])); |
||||
WordArray[i] = tmp; |
||||
} |
||||
for (uint32_t i = 16; i < 80; i++) { |
||||
WordArray[i] = leftRotate((WordArray[i - 3] ^ WordArray[i - 8] ^ WordArray[i - 14] ^ WordArray[i - 16]), 1); |
||||
} |
||||
#pragma endregion |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
uint32_t leftRotate(uint32_t n, uint32_t d) |
||||
{ |
||||
/* In n<<d, last d bits are 0. To put first 3 bits of n at
|
||||
last, do bitwise or of n<<d with n >>(INT_BITS - d) */ |
||||
return (n << d) | (n >> (VALUE_LENGTH - d)); |
||||
} |
||||
|
||||
// Assumes little endian
|
||||
void printBits(size_t const size, void const* const ptr) |
||||
{ |
||||
unsigned char* b = (unsigned char*)ptr; |
||||
unsigned char byte; |
||||
int i, j; |
||||
|
||||
for (i = 0; i < size; i++) { |
||||
for (j = 7; j >= 0; j--) { |
||||
byte = (b[i] >> j) & 1; |
||||
printf("%u", byte); |
||||
} |
||||
} |
||||
/*for (i = size - 1; i >= 0; i--) {
|
||||
for (j = 7; j >= 0; j--) { |
||||
byte = (b[i] >> j) & 1; |
||||
printf("%u", byte); |
||||
} |
||||
}*/ |
||||
puts(""); |
||||
} |
||||
Loading…
Reference in new issue