Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/libsrtp/src/crypto/test/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 5 kB image not shown  

Quelle  aes_calc.c   Sprache: C

 
/*
 * aes_calc.c
 *
 * A simple AES calculator for generating AES encryption values
 *
 * David A. McGrew
 * Cisco Systems, Inc.
 */


/*
 *
 * Copyright (c) 2001-2017, Cisco Systems, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 *   Redistributions in binary form must reproduce the above
 *   copyright notice, this list of conditions and the following
 *   disclaimer in the documentation and/or other materials provided
 *   with the distribution.
 *
 *   Neither the name of the Cisco Systems, Inc. nor the names of its
 *   contributors may be used to endorse or promote products derived
 *   from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */


/*

 Example usage (with first NIST FIPS 197 test case):

 [sh]$ test/aes_calc 000102030405060708090a0b0c0d0e0f \
       00112233445566778899aabbccddeeff -v

 plaintext:      00112233445566778899aabbccddeeff
 key:            000102030405060708090a0b0c0d0e0f
 ciphertext:     69c4e0d86a7b0430d8cdb78070b4c55a

 */


#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "aes.h"
#include <stdio.h>
#include <string.h>
#include "util.h"

void usage(char *prog_name)
{
    printf("usage: %s [<ciphertext>] [-v]\n"</span>,&nbsp;prog_name);<br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>exit</span>(255);<br> }<br> <br> <span style='color:turquoise'>#define</span>&nbsp;AES_MAX_KEY_LEN&nbsp;32<br> <br> <span style='color:red'>int</span>&nbsp;main(<span style='color:red'>int</span>&nbsp;argc,&nbsp;<span style='color:red'>char</span>&nbsp;*argv[])<br> {<br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>const</span>&nbsp;<span style='color:red'>char</span>&nbsp;*expected_ciphertext&nbsp;=&nbsp;NULL;<br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>const</span>&nbsp;<span style='color:red'>char</span>&nbsp;*ciphertext&nbsp;=&nbsp;NULL;<br> &nbsp;&nbsp;&nbsp;&nbsp;v128_t&nbsp;data;<br> &nbsp;&nbsp;&nbsp;&nbsp;uint8_t&nbsp;key[AES_MAX_KEY_LEN];<br> &nbsp;&nbsp;&nbsp;&nbsp;srtp_aes_expanded_key_t&nbsp;exp_key;<br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>int</span>&nbsp;key_len,&nbsp;len;<br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>int</span>&nbsp;verbose&nbsp;=&nbsp;0;<br> &nbsp;&nbsp;&nbsp;&nbsp;srtp_err_status_t&nbsp;status;<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;-v&nbsp;must&nbsp;be&nbsp;last&nbsp;if&nbsp;it's&nbsp;passed&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(argc&nbsp;&gt;&nbsp;0&nbsp;&&&nbsp;strncmp(argv[argc&nbsp;-&nbsp;1],&nbsp;<span style='color:blue'>"-v"</span>,&nbsp;2)&nbsp;==&nbsp;0)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;we're&nbsp;in&nbsp;verbose&nbsp;mode&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verbose&nbsp;=&nbsp;1;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--argc;<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(argc&nbsp;&lt;&nbsp;3&nbsp;||&nbsp;argc&nbsp;&gt;&nbsp;4)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;we've&nbsp;been&nbsp;fed&nbsp;the&nbsp;wrong&nbsp;number&nbsp;of&nbsp;arguments&nbsp;-&nbsp;compain&nbsp;and&nbsp;exit&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usage(argv[0]);<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(argc&nbsp;==&nbsp;4)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;we're&nbsp;being&nbsp;passed&nbsp;the&nbsp;ciphertext&nbsp;to&nbsp;check&nbsp;(in&nbsp;unit&nbsp;test&nbsp;mode)&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expected_ciphertext&nbsp;=&nbsp;argv[3];<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(strlen(expected_ciphertext)&nbsp;!=&nbsp;16&nbsp;*&nbsp;2)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usage(argv[0]);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;read&nbsp;in&nbsp;key,&nbsp;checking&nbsp;length&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(strlen(argv[1])&nbsp;&gt;&nbsp;AES_MAX_KEY_LEN&nbsp;*&nbsp;2)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;<span style='color:blue'>"error: too many digits in key "</span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:blue'>"(should be at most %d hexadecimal digits, found %u)\n"</span>,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AES_MAX_KEY_LEN&nbsp;*&nbsp;2,&nbsp;(<span style='color:red'>unsigned</span>)strlen(argv[1]));<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>exit</span>(1);<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;hex_string_to_octet_string((<span style='color:red'>char</span>&nbsp;*)key,&nbsp;argv[1],&nbsp;AES_MAX_KEY_LEN&nbsp;*&nbsp;2);<br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;check&nbsp;that&nbsp;hex&nbsp;string&nbsp;is&nbsp;the&nbsp;right&nbsp;length&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(len&nbsp;!=&nbsp;32&nbsp;&&&nbsp;len&nbsp;!=&nbsp;48&nbsp;&&&nbsp;len&nbsp;!=&nbsp;64)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;<span style='color:blue'>"error: bad number of digits in key "</span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:blue'>"(should be 32/48/64 hexadecimal digits, found %d)\n"</span>,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>exit</span>(1);<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;&nbsp;key_len&nbsp;=&nbsp;len&nbsp;/&nbsp;2;<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;read&nbsp;in&nbsp;plaintext,&nbsp;checking&nbsp;length&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(strlen(argv[2])&nbsp;&gt;&nbsp;16&nbsp;*&nbsp;2)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;<span style='color:blue'>"error: too many digits in plaintext "</span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:blue'>"(should be %d hexadecimal digits, found %u)\n"</span>,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;*&nbsp;2,&nbsp;(<span style='color:red'>unsigned</span>)strlen(argv[2]));<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>exit</span>(1);<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;hex_string_to_octet_string((<span style='color:red'>char</span>&nbsp;*)(&data),&nbsp;argv[2],&nbsp;16&nbsp;*&nbsp;2);<br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;check&nbsp;that&nbsp;hex&nbsp;string&nbsp;is&nbsp;the&nbsp;right&nbsp;length&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(len&nbsp;&lt;&nbsp;16&nbsp;*&nbsp;2)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;<span style='color:blue'>"error: too few digits in plaintext "</span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:blue'>"(should be %d hexadecimal digits, found %d)\n"</span>,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;*&nbsp;2,&nbsp;len);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>exit</span>(1);<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(verbose)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;print&nbsp;out&nbsp;plaintext&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span style='color:blue'>"plaintext:\t%s\n"</span>,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;octet_string_hex_string((uint8_t&nbsp;*)&data,&nbsp;16));<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;encrypt&nbsp;plaintext&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;=&nbsp;srtp_aes_expand_encryption_key(key,&nbsp;key_len,&nbsp;&exp_key);<br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(status)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;<span style='color:blue'>"error: AES key expansion failed.\n"</span>);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>exit</span>(1);<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;srtp_aes_encrypt(&data,&nbsp;&exp_key);<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:green'>/*&nbsp;write&nbsp;ciphertext&nbsp;to&nbsp;output&nbsp;*/</span><br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(verbose)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span style='color:blue'>"key:\t\t%s\n"</span>,&nbsp;octet_string_hex_string(key,&nbsp;key_len));<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span style='color:blue'>"ciphertext:\t"</span>);<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;ciphertext&nbsp;=&nbsp;v128_hex_string(&data);<br> &nbsp;&nbsp;&nbsp;&nbsp;printf(<span style='color:blue'>"%s\n"</span>,&nbsp;ciphertext);<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>if</span>&nbsp;(expected_ciphertext&nbsp;&&&nbsp;strcmp(ciphertext,&nbsp;expected_ciphertext)&nbsp;!=&nbsp;0)&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;<span style='color:blue'>"error: calculated ciphertext %s does not match "</span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:blue'>"expected ciphertext %s\n"</span>,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ciphertext,&nbsp;expected_ciphertext);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>exit</span>(1);<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;<span style='color:red'>return</span>&nbsp;0;<br> }<br> </div><div align=center><br><table border=1 style='border: 1px solid black; border-collapse: collapse;'><tr><th colspan=3>Messung V0.5</th></tr><tr><td> <svg height='38' width='38' > <circle cx='19' cy='19' r='16' stroke='grey' fill='purple' fill-opacity='30%' stroke-linecap='round' stroke-width='3' stroke-dasharray='360' stroke-dashoffset='57' /> <text x='12' y='22' fill='red' font-size=6>C=92</text> </svg> </td><td> <svg height='38' width='38' > <circle cx='19' cy='19' r='16' stroke='grey' fill='purple' fill-opacity='30%' stroke-linecap='round' stroke-width='3' stroke-dasharray='360' stroke-dashoffset='0' /> <text x='12' y='22' fill='red' font-size=6>H=100</text> </svg> </td><td> <svg height='56' width='56' > <circle cx='28' cy='28' r='24' stroke='green' fill='purple' fill-opacity='30%' stroke-linecap='round' stroke-width='4' stroke-dasharray='360' stroke-dashoffset='36' /> <text x='18' y='32' fill='red' font-size=8>G=95</text> </svg> </td></tr></table></div> </span><br> <h3><b>¤</b>&nbsp;Dauer der Verarbeitung: 0.13 Sekunden&nbsp; (vorverarbeitet)&nbsp; <b>¤</b></h3> <p height="2" colspan="2" align="center"><span style="font-size: 3px;">*&copy; Formatika GbR, Deutschland</span></p> </div> </td> <td valign="top" align="center" class="greenscreensmall"> <br><br><br> <br> <table width="20%"> <tr><td align="center"> <a href="print.jsp?content=directory"> <br>Wurzel<br> <img border="0" src="/Images/penguin.jpg" height=36 alt="" title="Wurzel"> </a> </td> </tr> <tr><td align="center"> <a href="print.jsp?content=search" title="Suchen"> <br>Suchen<br> <img src="/Images/find.png" height="48" alt="" border="0"> </a> </td> </tr> <tr><td align="left"><a href="print.jsp?content=directory&detail=products/Sources/formale%20Sprachen/PVS/" title="Projekt "><br>Beweissystem der NASA</a></td></tr> <tr><td align="left"><a href="print.jsp?content=directory&detail=products/Sources/formale%20Sprachen/Isabelle/" title="Projekt "><br>Beweissystem Isabelle</a></td></tr> <tr><td align="left"><a href="print.jsp?content=directory&detail=products/Sources/formale%20Sprachen/Cobol/Test-Suite/" title="Projekt "><br>NIST Cobol Testsuite</a></td></tr> <tr><td align="left"><a href="print.jsp?content=directory&detail=products/Sources/formale%20Sprachen/Fortran/f90gl-1.2.15/" title="Projekt "><br>Cephes Mathematical Library</a></td></tr> <tr><td align="left"><a href="print.jsp?content=directory&detail=products/Sources/formale%20Sprachen/VDM/" title="Projekt "><br>Wiener Entwicklungsmethode</a></td></tr> <tr><td align="center"> <br> <h2>Haftungshinweis</h2> <div align="justify" class="featuresmall">Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.</div> <br> <h2>Bemerkung:</h2> <div align="justify" class="featuresmall"> Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.</div> <br> </td> </tr> </table> <br><br> <div> <br> <script src="https://formatika.de/base/formcheck.js"></script> <script> function checkform(form) { var res = true; res = res && isnotempty(form.file); res = res && isurl(form.file); return res; } </script> </div><br> <br> </td> </tr> </table> </div> <div class="printelement"> <script> warningpreview(); </script> </div> <p align=right class=hidden>2026-04-04</p> </td></tr> </table> </body> </html>