#pragma comment(lib, "crypt32.lib") #include <stdio.h> #include <windows.h> #include <Wincrypt.h> #define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING) void MyHandleError(char *s); void main(void) { //-------------------------------------------------------------------- // Declare and initialize variables. HCRYPTPROV hProv; // CSP handle HCRYPTKEY hSignKey; // Signature key pair handle HCRYPTKEY hXchgKey; // Exchange key pair handle HCRYPTKEY hKey; // Session key handle BYTE *pbKeyBlob; // Pointer to a simple key BLOB DWORD dwBlobLen; // The length of the key BLOB //-------------------------------------------------------------------- // Acquire a cryptographic provider context handle. if(CryptAcquireContext( &hProv, NULL, NULL, PROV_RSA_FULL, 0)) { printf("The CSP has been acquired. \n"); } else { MyHandleError("Error during CryptAcquireContext."); } //-------------------------------------------------------------------- // Get a handle to the signature key. // The signature key must exist before it can be retrieved. For more // information, see the CryptGetUserKey documentation. if(CryptGetUserKey( hProv, AT_SIGNATURE, &hSignKey)) { printf("The signature key has been acquired. \n"); } else { MyHandleError("Error during CryptGetUserKey for signkey."); } //-------------------------------------------------------------------- // Get a handle to the key exchange key. // The key must exist before it can be retrieved. For more // information, see the CryptGetUserKey documentation. if(CryptGetUserKey( hProv, AT_KEYEXCHANGE, &hXchgKey)) { printf("The key exchange key has been acquired. \n"); } else { printf("Error during CryptGetUserKey exchange key."); } // hSignKey may be used to verify a signature. hXchgKey will be used // to export a session key. //-------------------------------------------------------------------- // Generate a session key. if (CryptGenKey( hProv, CALG_RC4, CRYPT_EXPORTABLE, &hKey)) { printf("Original session key is created. \n"); } else { MyHandleError("ERROR -- CryptGenKey."); } // Determine the size of the key BLOB and allocate memory. if(CryptExportKey( hKey, hXchgKey, SIMPLEBLOB, 0, NULL, &dwBlobLen)) { printf("Size of the BLOB for the session key determined. \n"); } else { MyHandleError("Error computing BLOB length."); } if(pbKeyBlob = (BYTE*)malloc(dwBlobLen)) { printf("Memory has been allocated for the BLOB. \n"); } else { MyHandleError("Out of memory. \n"); } //-------------------------------------------------------------------- // Export the key into a simple key BLOB. if(CryptExportKey( hKey, hXchgKey, SIMPLEBLOB, 0, pbKeyBlob, &dwBlobLen)) { printf("Contents have been written to the BLOB. \n"); } else { MyHandleError("Error during CryptExportKey."); } //-------------------------------------------------------------------- // At this point, other processing such as writing the key BLOB to // a file could be done. //-------------------------------------------------------------------- // After all processing, clean up. //-------------------------------------------------------------------- // Free the memory used by the key BLOB. free(pbKeyBlob); // Destroy the session key. if(hKey) CryptDestroyKey(hKey); // Destroy the signature key handle. if(hSignKey) CryptDestroyKey(hSignKey); // Destroy the key exchange key handle. if(hXchgKey) CryptDestroyKey(hXchgKey); // Release the provider handle. if(hProv) CryptReleaseContext(hProv, 0); printf("The program ran to completion without error. \n"); }// End of main //-------------------------------------------------------------------- // This example uses the function MyHandleError, a simple error // handling function, to print an error message and exit // the program. // For most applications, replace this function with one // that does more extensive error reporting. void MyHandleError(char *s) { printf("An error occurred in running the program.\n"); printf("%s\n",s); printf("Error number %x\n.",GetLastError()); printf("Program terminating.\n"); exit(1); }
Write, Run & Share C Language code online using OneCompiler's C online compiler for free. It's one of the robust, feature-rich online compilers for C language, running the latest C version which is C18. Getting started with the OneCompiler's C editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'C' and start coding!
OneCompiler's C online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample C program which takes name as input and print your name with hello.
#include <stdio.h>
int main()
{
char name[50];
printf("Enter name:");
scanf("%s", name);
printf("Hello %s \n" , name );
return 0;
}
C language is one of the most popular general-purpose programming language developed by Dennis Ritchie at Bell laboratories for UNIX operating system. The initial release of C Language was in the year 1972. Most of the desktop operating systems are written in C Language.
When ever you want to perform a set of operations based on a condition if-else
is used.
if(conditional-expression) {
// code
} else {
// code
}
You can also use if-else for nested Ifs and if-else-if ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to if-else-if ladder.
switch(conditional-expression) {
case value1:
// code
break; // optional
case value2:
// code
break; // optional
...
default:
// code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
// code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.
data-type array-name[size];
data-type array-name[size][size];
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.
Two types of functions are present in C
Library functions are the in-built functions which are declared in header files like printf(),scanf(),puts(),gets() etc.,
User defined functions are the ones which are written by the programmer based on the requirement.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
//code
}