MFT File entry having multiple Filename attributes and a Reparse point - ntfs
I am reading MFT Entries of NTFS file system.
I know that MFT can have multiple FileName attributes, which are created when we create hard links. I know that Junctions/Symbolic links can be created for directories. Junction / Symbolic link are implemented using Reparse points.
While reading a VHD file formatted with NTFS filesystem, I find that there are some MFT entries for "Directories" having multiple Filename attributes and single Reparse point.
Is it possible for directories to have hardlinks (and more than one?). Below is the actual MFT Record. and screenshot. How do we create such record in MFT with mklink tool?
0x46, 0x49, 0x4c, 0x45, 0x30, 0x00, 0x03, 0x00, 0xe3, 0xaf, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x02, 0x00, 0x38, 0x00, 0x03, 0x00, 0x88, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x6c, 0x00, 0x00,
0x02, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0xe8, 0xe7, 0x87, 0xf8, 0x0a, 0xbb, 0xd0, 0x01, 0xe8, 0xe7, 0x87, 0xf8, 0x0a, 0xbb, 0xd0, 0x01,
0xab, 0xe1, 0xdc, 0x00, 0x89, 0x5e, 0xd1, 0x01, 0xe8, 0xe7, 0x87, 0xf8, 0x0a, 0xbb, 0xd0, 0x01,
0x06, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x73, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x01, 0x00,
0x95, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xab, 0xe1, 0xdc, 0x00, 0x89, 0x5e, 0xd1, 0x01,
0xab, 0xe1, 0xdc, 0x00, 0x89, 0x5e, 0xd1, 0x01, 0xab, 0xe1, 0xdc, 0x00, 0x89, 0x5e, 0xd1, 0x01,
0xab, 0xe1, 0xdc, 0x00, 0x89, 0x5e, 0xd1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
0x0e, 0x01, 0x4c, 0x00, 0x6f, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x53, 0x00,
0x65, 0x00, 0x74, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
0x52, 0x00, 0x00, 0x00, 0x18, 0x00, 0x01, 0x00, 0x95, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0xe8, 0xe7, 0x87, 0xf8, 0x0a, 0xbb, 0xd0, 0x01, 0xe8, 0xe7, 0x87, 0xf8, 0x0a, 0xbb, 0xd0, 0x01,
0xab, 0xe1, 0xdc, 0x00, 0x89, 0x5e, 0xd1, 0x01, 0xe8, 0xe7, 0x87, 0xf8, 0x0a, 0xbb, 0xd0, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x24, 0x00, 0x10, 0x03, 0x00, 0x00, 0xa0, 0x08, 0x02, 0x4c, 0x00, 0x4f, 0x00, 0x43, 0x00,
0x41, 0x00, 0x4c, 0x00, 0x53, 0x00, 0x7e, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x90, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00,
0x30, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x49, 0x00, 0x33, 0x00, 0x30, 0x00,
0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x94, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x44, 0x00, 0x46, 0x00, 0x3c, 0x00, 0x5c, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x02, 0x00,
0x43, 0x00, 0x3a, 0x00, 0x5c, 0x00, 0x55, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00,
0x5c, 0x00, 0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x74, 0x00,
0x5c, 0x00, 0x41, 0x00, 0x70, 0x00, 0x70, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00,
0x5c, 0x00, 0x4c, 0x00, 0x6f, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x43, 0x00,
0x3a, 0x00, 0x5c, 0x00, 0x55, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x5c, 0x00,
0x44, 0x00, 0x65, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x74, 0x00, 0x5c, 0x00,
0x41, 0x00, 0x70, 0x00, 0x70, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x5c, 0x00,
0x4c, 0x00, 0x6f, 0x00, 0x63, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x82, 0x79, 0x47, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
These are hard links corresponding to 8.3 file naming convention. If you look closely, every directory entries with reparse attribute has a ~ symbol in its name. Also, you can see that the reparse attribute is only present in the second file name attribute.
Related
OpenGL draws nothing on Mac, Objective-C
I'm trying to draw something using OpenGL with VAO and VBO objects. To do that, I just subclassed NSOpenGLView. By default, OpenGL v2.1 was used, so, I put a PixelFormat, wrote code, and solved all the printed errors. For now the app is running well, but nothing is drawing at the window, even glClearColor has no effect. Please, help me to find and solve the problems. My OS is Mac v10.12 with OpenGL v4.1. MyOpenGLView.m, part 1: #import "MyOpenGLView.h" #include <OpenGL/gl3.h> #include "error.h" static const char *vertexShaderSource = "#version 410\n" "in vec3 posAttr;\n" "in vec3 colAttr;\n" "out vec3 col;\n" "void main() {\n" " col = colAttr;\n" " gl_Position.xyz = posAttr;\n" " gl_Position.w = 1.0;\n" " col = colAttr;\n" "}\n"; static const char *fragmentShaderSource = "#version 410\n" "in vec3 col;\n" "out vec4 color;\n" "void main() {\n" " color.rgb = col;\n" " color.a = 1.0;\n" //" color = vec4(1,1,1,1);\n" "}\n"; // Shader properties GLuint m_posAttr; GLuint m_colAttr; GLuint program; // Arrays of positions and colors float fTriangle[9]; float fTriangleColor[9]; // Low-level VBOs and VBAs GLuint uiVBO[2]; GLuint uiVAO[1]; GLuint makeShader(GLenum type, const char *source) { GLuint shader; shader = glCreateShader(type); GetError(); glShaderSource(shader, 1, &source, NULL); GetError(); glCompileShader(shader); GetError(); #if defined(DEBUG) GLint logLength; glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength); GetError(); if (logLength > 0) { GLchar *log = malloc((size_t)logLength); glGetShaderInfoLog(shader, logLength, &logLength, log); GetError(); NSLog(#"Shader compilation failed with error:\n%s", log); free(log); } #endif GLint status; glGetShaderiv(shader, GL_COMPILE_STATUS, &status); GetError(); if (0 == status) { glDeleteShader(shader); GetError(); NSLog(#"Shader compilation failed from code!"); assert(0); } return shader; } MyOpenGLView.m, part 2: //// General staff #implementation MyOpenGLView - (void)awakeFromNib { // Positions and colors of figures fTriangle[0] = -0.4f; fTriangle[1] = 0.1f; fTriangle[2] = 0.0f; fTriangle[3] = 0.4f; fTriangle[4] = 0.1f; fTriangle[5] = 0.0f; fTriangle[6] = 0.0f; fTriangle[7] = 0.7f; fTriangle[8] = 0.0f; fTriangleColor[0] = 1.0f; fTriangleColor[1] = 0.0f; fTriangleColor[2] = 0.0f; fTriangleColor[3] = 0.0f; fTriangleColor[4] = 1.0f; fTriangleColor[5] = 0.0f; fTriangleColor[6] = 0.0f; fTriangleColor[7] = 0.0f; fTriangleColor[8] = 1.0f; NSOpenGLPixelFormatAttribute attrs[] = { NSOpenGLPFADoubleBuffer, NSOpenGLPFADepthSize, 24, NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core, 0 }; NSOpenGLPixelFormat *pf = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; if (!pf) { NSLog(#"No OpenGL pixel format"); } NSOpenGLContext* context = [[NSOpenGLContext alloc] initWithFormat:pf shareContext:nil]; [self setPixelFormat:pf]; [self setOpenGLContext:context]; NSLog(#"%s", glGetString(GL_VERSION)); GetError(); GLuint vertexShader = makeShader(GL_VERTEX_SHADER, vertexShaderSource); GLuint fragmentShader = makeShader(GL_FRAGMENT_SHADER, fragmentShaderSource); program = glCreateProgram(); GetError(); glAttachShader(program, vertexShader); GetError(); glAttachShader(program, fragmentShader); GetError(); glLinkProgram(program); GetError(); GLint status; glGetProgramiv(program, GL_LINK_STATUS, &status); GetError(); if (0 == status) { NSLog(#"Failed to link shader program"); assert( 0 ); } m_posAttr = glGetAttribLocation(program, "posAttr"); GetError(); m_colAttr = glGetAttribLocation(program, "colAttr"); GetError(); glGenVertexArrays(1, &uiVAO[0]); glGenBuffers(2, &uiVBO[0]); GetError(); } - (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(program); GetError(); glBindVertexArray(uiVAO[0]); GetError(); glBindBuffer(GL_ARRAY_BUFFER, uiVBO[0]); glBufferData(GL_ARRAY_BUFFER, 9*sizeof(float), fTriangle, GL_STATIC_DRAW); glEnableVertexAttribArray(m_posAttr); GetError(); glVertexAttribPointer(m_posAttr, 3, GL_FLOAT, GL_FALSE, 0, 0); GetError(); glBindBuffer(GL_ARRAY_BUFFER, uiVBO[1]); glBufferData(GL_ARRAY_BUFFER, 9*sizeof(float), fTriangleColor, GL_STATIC_DRAW); glEnableVertexAttribArray(m_colAttr); GetError(); glVertexAttribPointer(m_colAttr, 3, GL_FLOAT, GL_FALSE, 0, 0); GetError(); glDrawArrays(GL_TRIANGLES, 0, 3); GetError(); glDisableVertexAttribArray(m_posAttr); glDisableVertexAttribArray(m_colAttr); glFlush(); GetError(); } - (void)dealloc { glDeleteProgram(program); glDeleteBuffers(2, uiVBO); glDeleteVertexArrays(1, uiVAO); GetError(); } #end error.h: //// Prints OpenGL errors #ifndef __ERROR_H__ #define __ERROR_H__ #include <stdlib.h> #include <assert.h> #ifdef DEBUG #define GetError( )\ {\ for ( GLenum Error = glGetError( ); ( GL_NO_ERROR != Error ); Error = glGetError( ) )\ {\ switch ( Error )\ {\ case GL_INVALID_ENUM: printf( "\n%s\n\n", "GL_INVALID_ENUM" ); assert( 0 ); break;\ case GL_INVALID_VALUE: printf( "\n%s\n\n", "GL_INVALID_VALUE" ); assert( 0 ); break;\ case GL_INVALID_OPERATION: printf( "\n%s\n\n", "GL_INVALID_OPERATION" ); assert( 0 ); break;\ case GL_OUT_OF_MEMORY: printf( "\n%s\n\n", "GL_OUT_OF_MEMORY" ); assert( 0 ); break;\ default: break;\ }\ }\ } #else #define GetError( ) #endif /* DEBUG */ #endif /* __ERROR_H__ */
After lots of effort and code's modifications I figured it out: the only real problem was with NSOpenGLPFADoubleBuffer option in NSOpenGLPixelFormatAttribute array. After commenting this option I got the desired output. To my mind, the reason is that I had 2 output graphical buffers. However, the code was executed a single time, 1st buffer was painted and then swapped. So, the 2nd buffer, which is empty, was drawn.
ALG_RSA_NOPAD Illegal Use Exception despite message in proper alignment in Java Card
I am trying to use an RSA private key to "encrypt" a message (I am trying to use the RSA encrypt operation for the use of the raw modulus exponential operation similar to the Diffie-Hellman) using the ALG_RSA_NOPAD algorithm in a JavaCard environment. I am getting the ILLEGAL_USE Exception despite ensuring my hard-coded message is zero filled by hard-coding as shown in the code below. private byte[] M = { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //25 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // 50 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // 75 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // 100 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // 125 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // 150 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // 175 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // 200 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // 225 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // 250 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02 // 256 }; priv = (RSAPrivateKey) KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_PRIVATE_TRANSIENT_RESET, KeyBuilder.LENGTH_RSA_2048, false); cipher = Cipher.getInstance(Cipher.ALG_RSA_NOPAD, false); KeyPair keyPair = new KeyPair(KeyPair.ALG_RSA, (short) priv.getSize()); keyPair.genKeyPair(); priv = (RSAPrivateKey) keyPair.getPrivate(); cipher.init(priv, Cipher.MODE_ENCRYPT); cipher.doFinal(M, (short) 0, (short) 256, buff, (short) 0); // Encrypt hard-coded message M What am I missing ?
PrivateKey classes are not able to use ENCRYPT mode which the use of DECRYPT mode is the only option to get the RSA modulus exponential mechanism to work with a PrivateKey.
Cocoa and OpenGL teapot not drawn correctly
I mixed Cocoa, GLUT and OpenGL frameworks to draw a teapot. I usually do this in plain C but I need to mix up Cocoa buttons and stuffs with OpenGL, this is the corrispettive C code: #import <OpenGL/OpenGL.h> #import <GLUT/GLUT.h> #import <math.h> #include "utility.h" GLuint width=640, height=480; GLfloat angle=0.0; void init() { glEnable(GL_DEPTH_TEST); glViewport(-500, -500, 1000, 1000); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, width/(float)height, 1, 1000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0, 0, -100, 0, 0, 0, 0, 1, 0); // Luci glShadeModel(GL_FLAT); glLightfv(GL_LIGHT0, GL_AMBIENT, (const GLfloat[]) {0,0,0} ); glLightfv(GL_LIGHT0, GL_DIFFUSE, (const GLfloat[]) {1,1,0} ); glLightfv(GL_LIGHT0, GL_SPECULAR, (const GLfloat[]) {0.5,0.5,0} ); glMaterialfv(GL_FRONT, GL_AMBIENT, (const GLfloat[]) {1,0,0} ); glMaterialfv(GL_FRONT, GL_DIFFUSE, (const GLfloat[]) {1,0.25,0} ); glMaterialfv(GL_FRONT, GL_SPECULAR, (const GLfloat[]) {1,0.75,0} ); glMaterialfv(GL_FRONT, GL_SHININESS, (const GLfloat[]) {1,1,0} ); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); } void display() { glClearColor(BLACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(angle, 0, 1, 0); glutSolidTeapot(10); glPopMatrix(); glutSwapBuffers(); } void keyboard(unsigned char key, int x, int y) { if(key=='+') { angle+=5.0; } else if(key=='-') { angle-=5.0; } else { return; } makeRound(&angle); glutPostRedisplay(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowPosition(100, 100); glutInitWindowSize(width, height); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutKeyboardFunc(keyboard); init(); glutMainLoop(); return 0; } And this is the result: Then I'm subclassing a NSOpenGLView and do the same of this C code, just with different sizes, but the meterials and lights are the same: #implementation MyView #synthesize angle; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { } return self; } - (void) prepareOpenGL { NSOpenGLContext* context= self.openGLContext; GLfloat width= self.bounds.size.width; GLfloat height= self.bounds.size.height; [context makeCurrentContext]; glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, width/height, 1, 1000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0, 0, -100, 0, 0, 0, 0, 1, 0); // Lighting glShadeModel(GL_FLAT); glLightfv(GL_LIGHT0, GL_AMBIENT, (const GLfloat[]) {0,0,0} ); glLightfv(GL_LIGHT0, GL_DIFFUSE, (const GLfloat[]) {1,1,0} ); glLightfv(GL_LIGHT0, GL_SPECULAR, (const GLfloat[]) {0.5,0.5,0} ); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (const GLfloat[]) {1,0,0} ); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (const GLfloat[]) {1,0.25,0} ); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (const GLfloat[]) {1,0.75,0} ); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, (const GLfloat[]) {1,1,0} ); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); } - (void)drawRect:(NSRect)dirtyRect { glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(angle, 0, 1, 0); glutSolidTeapot(20); glPopMatrix(); glFlush(); } #pragma mark - Actions - (IBAction) increaseAngle :(id)sender { angle+=5.0; if(angle>360.0) { angle-=360.0; } [self setNeedsDisplay: YES]; } - (IBAction) decreaseAngle:(id)sender { angle-=5.0; if(angle<0.0) { angle+=360.0; } [self setNeedsDisplay: YES]; } #end And this is the result: That's pretty ugly and considering that I used the same meterials and lights, I think that I'm doing something wrong in the one done with Cocoa and OpenGL mixed.
Make sure you request a depth buffer when you create your GL context. You may not get one by default.
how to do image recognition in iphone apps [duplicate]
This question already has answers here: Closed 10 years ago. Possible Duplicate: An iPhone library for shape recognition via the camera I am iPhone mobile apps developer and am looking for image recognition libraries to integrate in one of my App which should work like google's goggle functionality . I saw https://www.iqengines.com/ and downlaoded its ios sdk and it worked well . But its not free version . I am searching for open source sdk . also how opencv useful in accomplishing this ? beacuse some of the sources redirecting to openCV . Please let me know if any one come across this . Thanks
Yes, OpenCV works on iOS and will provide you with a good library of tools to use. You can either build your own .framework (a bit tiresome) or download one of the internet. To build one, refer to this OpenCV guide If you want to download a pre-built framework, head over there After that, you should be able to build computer vision software on iOS, be careful though, image processing can take a lot of power and memory. OpenCV has its own C++ classes for images, you will probably need to convert them back and forth to UIImage for input and displaying I leave here this piece of code I use for NSImage, you should find enough for you to change a bit the code for UIImage // // NSImage+OpenCV.h // #import <AppKit/AppKit.h> #interface NSImage (NSImage_OpenCV) { } +(NSImage*)imageWithCVMat:(const cv::Mat&)cvMat; -(id)initWithCVMat:(const cv::Mat&)cvMat; #property(nonatomic, readonly) cv::Mat CVMat; #property(nonatomic, readonly) cv::Mat CVGrayscaleMat; #end And // // NSImage+OpenCV.mm // #import "NSImage+OpenCV.h" static void ProviderReleaseDataNOP(void *info, const void *data, size_t size) { return; } #implementation NSImage (NSImage_OpenCV) -(CGImageRef)CGImage { CGContextRef bitmapCtx = CGBitmapContextCreate(NULL/*data - pass NULL to let CG allocate the memory*/, [self size].width, [self size].height, 8 /*bitsPerComponent*/, 0 /*bytesPerRow - CG will calculate it for you if it's allocating the data. This might get padded out a bit for better alignment*/, [[NSColorSpace genericRGBColorSpace] CGColorSpace], kCGBitmapByteOrder32Host|kCGImageAlphaPremultipliedFirst); [NSGraphicsContext saveGraphicsState]; [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:bitmapCtx flipped:NO]]; [self drawInRect:NSMakeRect(0,0, [self size].width, [self size].height) fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0]; [NSGraphicsContext restoreGraphicsState]; CGImageRef cgImage = CGBitmapContextCreateImage(bitmapCtx); CGContextRelease(bitmapCtx); return cgImage; } -(cv::Mat)CVMat { CGImageRef imageRef = [self CGImage]; CGColorSpaceRef colorSpace = CGImageGetColorSpace(imageRef); CGFloat cols = self.size.width; CGFloat rows = self.size.height; cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to backing data cols, // Width of bitmap rows, // Height of bitmap 8, // Bits per component cvMat.step[0], // Bytes per row colorSpace, // Colorspace kCGImageAlphaNoneSkipLast | kCGBitmapByteOrderDefault); // Bitmap info flags CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), imageRef); CGContextRelease(contextRef); CGImageRelease(imageRef); return cvMat; } -(cv::Mat)CVGrayscaleMat { CGImageRef imageRef = [self CGImage]; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGFloat cols = self.size.width; CGFloat rows = self.size.height; cv::Mat cvMat = cv::Mat(rows, cols, CV_8UC1); // 8 bits per component, 1 channel CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to backing data cols, // Width of bitmap rows, // Height of bitmap 8, // Bits per component cvMat.step[0], // Bytes per row colorSpace, // Colorspace kCGImageAlphaNone | kCGBitmapByteOrderDefault); // Bitmap info flags CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), imageRef); CGContextRelease(contextRef); CGColorSpaceRelease(colorSpace); CGImageRelease(imageRef); return cvMat; } + (NSImage *)imageWithCVMat:(const cv::Mat&)cvMat { return [[[NSImage alloc] initWithCVMat:cvMat] autorelease]; } - (id)initWithCVMat:(const cv::Mat&)cvMat { NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize() * cvMat.total()]; CGColorSpaceRef colorSpace; if (cvMat.elemSize() == 1) { colorSpace = CGColorSpaceCreateDeviceGray(); } else { colorSpace = CGColorSpaceCreateDeviceRGB(); } CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); CGImageRef imageRef = CGImageCreate(cvMat.cols, // Width cvMat.rows, // Height 8, // Bits per component 8 * cvMat.elemSize(), // Bits per pixel cvMat.step[0], // Bytes per row colorSpace, // Colorspace kCGImageAlphaNone | kCGBitmapByteOrderDefault, // Bitmap info flags provider, // CGDataProviderRef NULL, // Decode false, // Should interpolate kCGRenderingIntentDefault); // Intent NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage:imageRef]; NSImage *image = [[NSImage alloc] init]; [image addRepresentation:bitmapRep]; CGImageRelease(imageRef); CGDataProviderRelease(provider); CGColorSpaceRelease(colorSpace); return image; } #end (source)
CGImageCreateWithMaskingColors returns nil
Help! I've searched extensively and I haven't found a solution to this "simple" problem. What I am attempting to do is replace white pixels with alpha. It looks like CGImageCreateWithMaskingColors should give me what I want, unfortunately it returns nil in every case. Here's my code, what am I doing wrong? CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, 4 * size.width, colorSpace, kCGImageAlphaPremultipliedFirst); //draw a black background CGContextSetRGBFillColor(context,0,0, 0, 1); CGContextFillRect(context, CGRectMake(0, 0, size.width, size.height)); char* text2 = (char *)[text cStringUsingEncoding:NSASCIIStringEncoding]; CGContextSelectFont(context, "Helvetica Bold", kFontSize, kCGEncodingMacRoman); CGContextSetTextDrawingMode(context, kCGTextFill); //draw text with the "alpha" color white) CGContextSetRGBFillColor(context, 1, 1, 1, 1); float textLength = 20; CGContextShowTextAtPoint(context, (size.width/2)-(textLength/2), ((size.height/2)-(kFontSize/2))+5, text2, strlen(text2)); //create the black/white image CGImageRef alphaMask = CGBitmapContextCreateImage(context); const float colorMasking[6] = {0xEE, 0xFF, 0xEE, 0xFF, 0xEE, 0xFF}; CGImageRef imageMasked = CGImageCreateWithMaskingColors(alphaMask, colorMasking); imageMasked is nil no matter what I try. I would appreciate any help you can provide, thanks!