- clean working copy for leaving SVN
This commit is contained in:
@@ -0,0 +1,248 @@
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library - "Jules' Utility Class Extensions"
|
||||
Copyright 2004-12 by Raw Material Software Ltd.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
JUCE can be redistributed and/or modified under the terms of the GNU General
|
||||
Public License (Version 2), as published by the Free Software Foundation.
|
||||
A copy of the license is included in the JUCE distribution, or can be found
|
||||
online at www.gnu.org/licenses.
|
||||
|
||||
JUCE 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.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.rawmaterialsoftware.com/juce for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "../JuceDemoHeader.h"
|
||||
|
||||
|
||||
class RSAComponent : public Component,
|
||||
private Button::Listener
|
||||
{
|
||||
public:
|
||||
RSAComponent()
|
||||
{
|
||||
addAndMakeVisible (rsaGroup);
|
||||
rsaGroup.setText ("RSA Encryption");
|
||||
rsaGroup.setColour (GroupComponent::outlineColourId, Colours::darkgrey);
|
||||
rsaGroup.setColour (GroupComponent::textColourId, Colours::black);
|
||||
|
||||
bitSizeLabel.setText ("Num Bits to Use:", dontSendNotification);
|
||||
bitSizeLabel.attachToComponent (&bitSize, true);
|
||||
|
||||
addAndMakeVisible (bitSize);
|
||||
bitSize.setText (String (256));
|
||||
|
||||
addAndMakeVisible (generateRSAButton);
|
||||
generateRSAButton.setButtonText ("Generate RSA");
|
||||
generateRSAButton.addListener (this);
|
||||
|
||||
addAndMakeVisible (rsaResultBox);
|
||||
rsaResultBox.setColour (TextEditor::backgroundColourId, Colours::white.withAlpha (0.5f));
|
||||
rsaResultBox.setReadOnly (true);
|
||||
rsaResultBox.setMultiLine (true);
|
||||
}
|
||||
|
||||
void resized() override
|
||||
{
|
||||
Rectangle<int> area (getLocalBounds());
|
||||
rsaGroup.setBounds (area);
|
||||
area.removeFromTop (10);
|
||||
area.reduce (5, 5);
|
||||
|
||||
Rectangle<int> topArea (area.removeFromTop (34));
|
||||
topArea.removeFromLeft (110);
|
||||
bitSize.setBounds (topArea.removeFromLeft (topArea.getWidth() / 2).reduced (5));
|
||||
generateRSAButton.setBounds (topArea.reduced (5));
|
||||
|
||||
rsaResultBox.setBounds (area.reduced (5));
|
||||
}
|
||||
|
||||
private:
|
||||
void createRSAKey()
|
||||
{
|
||||
int bits = jlimit (32, 512, bitSize.getText().getIntValue());
|
||||
bitSize.setText (String (bits), dontSendNotification);
|
||||
|
||||
// Create a key-pair...
|
||||
RSAKey publicKey, privateKey;
|
||||
RSAKey::createKeyPair (publicKey, privateKey, bits);
|
||||
|
||||
// Test the new key on a piece of data...
|
||||
BigInteger testValue;
|
||||
testValue.parseString ("1234567890abcdef", 16);
|
||||
|
||||
BigInteger encodedValue (testValue);
|
||||
publicKey.applyToValue (encodedValue);
|
||||
|
||||
BigInteger decodedValue (encodedValue);
|
||||
privateKey.applyToValue (decodedValue);
|
||||
|
||||
// ..and show the results..
|
||||
String message;
|
||||
message << "Number of bits: " << bits << newLine
|
||||
<< "Public Key: " << publicKey.toString() << newLine
|
||||
<< "Private Key: " << privateKey.toString() << newLine
|
||||
<< newLine
|
||||
<< "Test input: " << testValue.toString (16) << newLine
|
||||
<< "Encoded: " << encodedValue.toString (16) << newLine
|
||||
<< "Decoded: " << decodedValue.toString (16) << newLine;
|
||||
|
||||
rsaResultBox.setText (message, false);
|
||||
}
|
||||
|
||||
GroupComponent rsaGroup;
|
||||
TextButton generateRSAButton;
|
||||
Label bitSizeLabel;
|
||||
TextEditor bitSize, rsaResultBox;
|
||||
|
||||
void buttonClicked (Button* buttonThatWasClicked) override
|
||||
{
|
||||
if (buttonThatWasClicked == &generateRSAButton)
|
||||
createRSAKey();
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RSAComponent)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class HashesComponent : public Component,
|
||||
private TextEditor::Listener
|
||||
{
|
||||
public:
|
||||
HashesComponent()
|
||||
{
|
||||
addAndMakeVisible (hashGroup);
|
||||
hashGroup.setText ("Hashes");
|
||||
hashGroup.setColour (GroupComponent::outlineColourId, Colours::darkgrey);
|
||||
hashGroup.setColour (GroupComponent::textColourId, Colours::black);
|
||||
|
||||
addAndMakeVisible (hashEntryBox);
|
||||
hashEntryBox.setMultiLine (true);
|
||||
hashEntryBox.setColour (TextEditor::backgroundColourId, Colours::white.withAlpha (0.5f));
|
||||
|
||||
hashEntryBox.setReturnKeyStartsNewLine (true);
|
||||
hashEntryBox.setText ("Type some text in this box and the resulting MD5 and SHA hashes will update below");
|
||||
hashEntryBox.addListener (this);
|
||||
|
||||
hashLabel1.setText ("Text to Hash:", dontSendNotification);
|
||||
hashLabel2.setText ("MD5 Result:", dontSendNotification);
|
||||
hashLabel3.setText ("SHA Result:", dontSendNotification);
|
||||
|
||||
hashLabel1.attachToComponent (&hashEntryBox, true);
|
||||
hashLabel2.attachToComponent (&md5Result, true);
|
||||
hashLabel3.attachToComponent (&shaResult, true);
|
||||
|
||||
addAndMakeVisible (md5Result);
|
||||
addAndMakeVisible (shaResult);
|
||||
|
||||
updateHashes();
|
||||
}
|
||||
|
||||
void updateHashes()
|
||||
{
|
||||
updateMD5Result();
|
||||
updateSHA256Result();
|
||||
}
|
||||
|
||||
void updateMD5Result()
|
||||
{
|
||||
const MD5 md5 (hashEntryBox.getText().toUTF8());
|
||||
|
||||
md5Result.setText (md5.toHexString(), dontSendNotification);
|
||||
}
|
||||
|
||||
void updateSHA256Result()
|
||||
{
|
||||
const SHA256 sha (hashEntryBox.getText().toUTF8());
|
||||
|
||||
shaResult.setText (sha.toHexString(), dontSendNotification);
|
||||
}
|
||||
|
||||
void resized() override
|
||||
{
|
||||
Rectangle<int> area (getLocalBounds());
|
||||
hashGroup.setBounds (area);
|
||||
area.removeFromLeft (80);
|
||||
area.removeFromTop (10);
|
||||
area.reduce (5, 5);
|
||||
shaResult.setBounds (area.removeFromBottom (34).reduced (5));
|
||||
md5Result.setBounds (area.removeFromBottom (34).reduced (5));
|
||||
hashEntryBox.setBounds (area.reduced (5));
|
||||
}
|
||||
|
||||
private:
|
||||
GroupComponent hashGroup;
|
||||
TextEditor hashEntryBox;
|
||||
Label md5Result, shaResult;
|
||||
Label hashLabel1, hashLabel2, hashLabel3;
|
||||
|
||||
void textEditorTextChanged (TextEditor& editor) override
|
||||
{
|
||||
if (&editor == &hashEntryBox)
|
||||
updateHashes();
|
||||
}
|
||||
|
||||
void textEditorReturnKeyPressed (TextEditor& editor) override
|
||||
{
|
||||
if (&editor == &hashEntryBox)
|
||||
updateHashes();
|
||||
}
|
||||
|
||||
void textEditorEscapeKeyPressed (TextEditor& editor) override
|
||||
{
|
||||
if (&editor == &hashEntryBox)
|
||||
updateHashes();
|
||||
}
|
||||
|
||||
void textEditorFocusLost (TextEditor& editor) override
|
||||
{
|
||||
if (&editor == &hashEntryBox)
|
||||
updateHashes();
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (HashesComponent)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class CryptographyDemo : public Component
|
||||
{
|
||||
public:
|
||||
CryptographyDemo()
|
||||
{
|
||||
addAndMakeVisible (rsaDemo);
|
||||
addAndMakeVisible (hashDemo);
|
||||
}
|
||||
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
g.fillAll (Colour::greyLevel (0.4f));
|
||||
}
|
||||
|
||||
void resized() override
|
||||
{
|
||||
Rectangle<int> area (getLocalBounds());
|
||||
rsaDemo.setBounds (area.removeFromTop (getHeight() / 2).reduced (5));
|
||||
hashDemo.setBounds (area.reduced (5));
|
||||
}
|
||||
|
||||
private:
|
||||
RSAComponent rsaDemo;
|
||||
HashesComponent hashDemo;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CryptographyDemo)
|
||||
};
|
||||
|
||||
|
||||
// This static object will register this demo type in a global list of demos..
|
||||
static JuceDemoType<CryptographyDemo> demo ("40 Cryptography");
|
||||
Reference in New Issue
Block a user